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