我正在尝试转换现有的同步代码库以支持对循环中多个项目的异步函数调用。 在内部,有一个Long任务被调用,需要10分钟来处理。
我已经遍历了很多链接并研究了一些现有方法。 我可以使用python多重处理(apply_async,池),但我认为这不能完全解决问题。 另外,我使用的是python 2.7,因此无法使用最新的asyncio / await功能。
我在process.py中尝试过:
pool = Pool(processes=4)
results = pool.map(launchTask, b, c)
但是,这符合我的要求,但不好。 因为我将不得不更改actualRunTask(...)才能正确打印结果,而我却被允许更改它。
在我的示例中,有3个组成部分- 1.我需要像这样的循环中处理输入列表(对象) process.py
def process(aList, b, c):
for a in aList:
x = createObj(a, b, c) # Creates object of class Launcher
x.launchTask()
class Launcher:
def launchTask(a, b, c):
...some preprocessing...
ret = ""
while ret == "" or ret == "INIT" or ret == "PEND":
ret = actualRunTask(b, c)
sleep(5)
print (ret)
print "#########FINISHED########"
class ActualTask:
self._map = dict()
def actualRunTask(b, c):
registerCallBackFromC++(self)
tag = "index"
if tag in _map:
if self._map[tag] is None:
return "PEND"
else:
if len(self._map[tag].Errors) == 0:
return "DONE"
else:
return "ERROR"
LongTaskSwigCallToC++Async(args) # Takes 10 minutes
self._map[tag] = None
return "INIT"
当前:
预期: