[英]python pool map and apply_async
我试图在下面的示例中学习map
和apply_async
(从此处改编)。
from multiprocessing import Pool, Manager
from functools import partial
import time
def operate(number1=None, number2=None, op=None, timeout_list=None):
if op == "+":
return number1 + number2
elif op == "-":
time.sleep(1)
return number1 - number2
elif op == "/":
time.sleep(6)
return number1 / number2
elif op == "*":
time.sleep(10)
return number1 * number2
else:
print("+, -, /, *")
timeout_list = Manager().list()
kwargs = {"number1":10, "number2":7, "timeout_list":timeout_list}
if __name__ == '__main__':
ops = ["+", "+", "-", "*", "/", "+"]
pool = Pool(processes=len(ops))
result = pool.map(partial(operate, kwargs),ops)
print(result.get(timeout=5))
我正在尝试做三件事:
number1
和number2
进行部分设置operate
后,将op
作为关键字进行map
(但我目前正在得到AttributeError: 'list' object has no attribute 'get'
) *
和/
进行超时,并分别从timeout_list
时返回*
和/
apply_async
实现以下apply_async
,有什么区别? 问题 :...将op作为关键字传递给地图
您已将以下内容放入def operate(...
以查看您的操作:
def operate(number1=None, number2=None, op=None, timeout_list=None):
print('pid:{} operate({})'.format(os.getpid(), (number1, number2, op, timeout_list)))
>>>pid:4932 operate(({'number1': 10, 'number2': 7, 'timeout_list': <ListProxy object, typeid 'list' at 0xf6c0afac>},
'+',
None,
None)
)
number1
== kwargs dict
number2
== ops[x]
op
== None
,因为仅使用2个参数 timeout_list
== None
,因为您仅使用2个参数 问题 :...部分设置使用数字1和数字2进行操作
您还没有 ,请执行以下操作查看partial
操作:
print(partial(operate, kwargs))
>>>functools.partial(<function operate at 0xf70ed194>,
{'number1': 10, 'number2': 7, 'timeout_list': <ListProxy object, typeid 'list' at 0xf70f38ec>})
问题 :...正在获取AttributeError:“ list”对象没有属性“ get”)
仔细阅读AttributeError !
.map(...
返回纯Python list
而不是结果对象 !
print(result)
>>>[None, None, None, None, None, None]
问题 :2.获取操作*和/到超时并返回...
不清楚你在问什么?
问题 :3.如何使用apply_async实现以下目标?
在进一步了解之前,请先运行步骤1和2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.