Python3池异步进程|工作者

Python3池异步进程|工作者,python,asynchronous,Python,Asynchronous,我正在尝试将4个进程用于4个异步方法 以下是我的1异步方法(x)代码: multiprocessing.Pool被设计成一种方便的方式,可以将工作分配给一个工作人员池,而不必担心哪个工作人员做哪个工作。它有一个大小的原因是允许您延迟将工作分配到队列的速度,并限制创建子进程的昂贵(相对)开销 因此,您的问题的答案是原则上您不应该访问池中的单个工人。如果您希望能够单独处理员工,则需要实现自己的工作分配系统,并使用多处理.Process,例如: from multiprocessing import

我正在尝试将4个进程用于4个异步方法

以下是我的1异步方法(x)代码:


multiprocessing.Pool
被设计成一种方便的方式,可以将工作分配给一个工作人员池,而不必担心哪个工作人员做哪个工作。它有一个大小的原因是允许您延迟将工作分配到队列的速度,并限制创建子进程的昂贵(相对)开销

因此,您的问题的答案是原则上您不应该访问池中的单个工人。如果您希望能够单独处理员工,则需要实现自己的工作分配系统,并使用
多处理.Process
,例如:

from multiprocessing import Process

def x(i):
    while(i < 100):
        print(i)
        i += 1

pools = [Process(target=x, args=(1,)) for _ in range(5)]
map(lambda pool: pool.start(), pools)
map(lambda pool: pool.join(), pools)
print('Done!')
来自多处理导入进程的

def x(i):
而(i<100):
印刷品(一)
i+=1
范围(5)内的u的池=[进程(目标=x,参数=(1,)]
映射(lambda池:pool.start(),池)
映射(lambda池:pool.join(),池)
打印('Done!')
现在,您可以直接访问每个工作人员。如果您希望能够在每个worker运行时动态地将工作发送给它(而不是像我在示例中所做的那样只给它一件事情),那么您必须自己实现这一点,可能需要使用
多处理.Queue
。查看
多处理
的代码,了解它如何将工作分配给工作人员,从而了解如何做到这一点


你为什么要这么做?如果只是关心员工是否能有效地安排时间,那么我的建议就是相信
多处理
能为您正确安排时间,除非你有很好的证据表明,在你的情况下,它不适用于某些原因。

是否应用异步应用于下一个可用的进程?我不认为这是我要找的好,你能更详细地解释一下你要找什么吗?您是否只是想知道对
x()
的每个调用何时完成?
from multiprocessing import Pool
import time

class ASYNC(object):
    def __init__(self, THREADS=[]):
        print('do')
        pool = Pool(processes=len(THREADS))
        self.THREAD_POOL = {}
        thread_index = 0
        for thread_ in THREADS:
            self.THREAD_POOL[thread_index] = {
                'thread': thread_['thread'],
                'args': thread_['args'],
                'callback': thread_['callback']
            }
            pool.apply_async(self.run, [thread_index], callback=thread_['callback'])
            self.THREAD_POOL[thread_index]['running'] = True
            thread_index += 1
    def run(self, thread_index):
        print('enter')
        while(self.THREAD_POOL[thread_index]['running']):
            print("loop")
            self.THREAD_POOL[thread_index]['thread'](self.THREAD_POOL[thread_index])
            time.sleep(1)
        self.THREAD_POOL[thread_index]['running'] = False
    def wait_for_finish(self):
        for pool in self.THREAD_POOL:
            while(self.THREAD_POOL[pool]['running']):
                time.sleep(1)
def x(pool):
    print(str(pool))
    pool['args'][0] += 1


def y(str):
    print("done")

A = ASYNC([{'thread': x, 'args':[10], 'callback':y}])

print("start")
A.wait_for_finish()
from multiprocessing import Process

def x(i):
    while(i < 100):
        print(i)
        i += 1

pools = [Process(target=x, args=(1,)) for _ in range(5)]
map(lambda pool: pool.start(), pools)
map(lambda pool: pool.join(), pools)
print('Done!')