Kra*_* Li 5 python multiprocessing
我在下面有一些非常简单的代码.#!/ usr/bin/python来自多处理导入池导入时间
def worker(job):
if job in range(25,30):
time.sleep(10)
print "job:%s" %job
return (job)
pool = Pool(processes=10)
result = []
for job in range(1, 1000):
result.append(pool.apply_async(worker(job)))
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我有一个工作人员使用多处理来处理1000个作业.如果工作是25-30,那么工人将睡10秒.这是尝试模拟时间/资源成本工作.
当我运行上面的代码时,输出如下所示.从作业25.整个过程就像一个顺序过程一样运行.因为每10秒就有一个作业后的输出24.直到作业30完成.
但为什么?不应该同时运行多处理过程吗?
[root@localhost tmp]# ./a.py
job:1
job:2
job:3
job:4
job:5
job:6
job:7
job:8
job:9
job:10
job:11
job:12
job:13
job:14
job:15
job:16
job:17
job:18
job:19
job:20
job:21
job:22
job:23
job:24
job:25
job:26
...
Run Code Online (Sandbox Code Playgroud)
因为你在实例化时调用它。您应该将可调用对象和参数(而不是结果)传递给 apply_async。
result.append(pool.apply_async(worker, [job]))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |