我的应用程序的一部分正在产生很多任务(本质上是字典)。每个任务(词典)本质上都是到第三方API的POST数据。
因此,我想对这些任务的执行进行多处理。
我当时想:创建一个多进程池,该池将从队列中读取任务,并将其发送到函数(FN),该函数随后将调用API。
问题是:我希望我应该能够继续在队列中推送由池连续读取的任务。但是,这没有发生。在更新队列(将任务推入队列)时,未调用函数(FN)。下面是代码:
from multiprocessing import Pool, Queue, cpu_count, Manager
class PoolThread:
running = False
def __init__(self, a):
self.initialisepool()
@staticmethod
def poolfunction(arg):
print(arg)
print(arg.qsize())
return "processed"
#return arg * arg
def callb(self, a):
print(a)
def errcall(self, b):
print(b)
def initialisepool(self):
print(cpu_count())
self.p = Pool(cpu_count())
self.m = Manager()
self.q = self.m.Queue()
self.p.map_async(self.poolfunction, (self.q,), cpu_count(), self.callb, self.errcall)
def readcache(self):
if not self.running:
self.running = True
self.threadedhandling()
def threadedhandling(self):
tasks = self.gettasks()
# Push to queue
self.q.put(tasks)
def gettasks(self):
dict_r = {'randomval' : 2}
return dict_r
pt = PoolThread()
pt.readcache()
在上面,池被初始化。但是,在调用readcache()时,不会重新调用poolfunction。如果队列中填充了self.p.map_async(self.poolfunction, (self.q,), cpu_count(), self.callb, self.errcall)
之前的数据,则仅调用poolfunction。
我的要求是: