为什么 Python 多处理是 运行 顺序?
Why Python multiprocessing is running sequencially?
我在下面得到了一些非常简单的代码。
#!/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()
如您所见,我有一个工人使用多处理来处理 1000 个作业。
如果工作是 25-30,那么工人将睡 10 秒。这是尝试模拟 time/resource 成本作业。
当我运行上面的代码时,输出如下。从作业 25 开始。整个过程 运行ning 就像一个连续的 process.Because 每 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
...
因为您在实例化时调用它。您应该将可调用对象和参数而不是结果传递给 apply_async.
result.append(pool.apply_async(worker, [job]))
我在下面得到了一些非常简单的代码。 #!/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()
如您所见,我有一个工人使用多处理来处理 1000 个作业。 如果工作是 25-30,那么工人将睡 10 秒。这是尝试模拟 time/resource 成本作业。
当我运行上面的代码时,输出如下。从作业 25 开始。整个过程 运行ning 就像一个连续的 process.Because 每 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
...
因为您在实例化时调用它。您应该将可调用对象和参数而不是结果传递给 apply_async.
result.append(pool.apply_async(worker, [job]))