- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
import multiprocessing
import time
import os
def worker():
print str(os.getpid()) + " is going to sleep..."
time.sleep(1)
print str(os.getpid()) + " woke up!"
return
if __name__ == "__main__":
pool = multiprocessing.Pool(processes = 8)
for _ in range(5):
pool.apply_async(worker())
我的输出:
23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!
该输出按顺序出现,显然所有输出都具有相同的 id。我期望看到的是 5 个独立的进程,警告它们将要 sleep ,然后在相似的时间醒来。
为什么这没有发生?我在 stackoverflow 和其他网站上做了很多研究,似乎每个人都确信这应该跨多个进程应用“worker”可调用,但事实似乎并非如此。
最佳答案
您正在调用worker
函数,因此当前进程执行该代码,然后执行结果worker
(即None
)被传递给apply_asynch
,它不执行任何操作。
将其更改为 pool.apply_asynch(worker)
通过这种方式,函数 worker
被传递给执行它的子进程。
明确地说,问题在于这之间的区别:
>>> def worker():
... print('Hi there!')
...
>>> def f(func):
... print('Received', func)
... func()
...
>>> f(worker())
Hi there!
Received None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in f
TypeError: 'NoneType' object is not callable
还有这个:
>>> f(worker)
Received <function worker at 0x7f5cd546f048>
Hi there!
请注意,前者的行顺序错误并产生 TypeError
。不幸的是,Pool.apply_asynch 默认情况下会静默异常。不过,您可以处理传递额外参数的错误。
关于Python 多处理 apply_async 仅使用一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38644254/
我是 python 的新手,我有一个函数可以为我的数据计算特征,然后返回一个应该处理并写入文件的列表。,..我正在使用 Pool 进行计算,然后使用写入文件的回调函数,但是回调函数没有被调用,我已经在
我试图了解多进程池是如何工作的。在下面的编程中,我创建了一个包含 4 个进程的池。 我使用回调函数调用 apply_async ,该函数应该更新名为 result_list 的列表 import Qu
我希望如果我调用 apply_async在实例方法中并获得其结果,所做的任何更改都将保留为 fork 进程的一部分。但是,似乎每次对 apply_async 的新调用都会创建所述实例的新副本。 采取以
我只是在使用 Python 的多处理模块,但是以下代码正在连续运行,但没有给出任何输出。我究竟做错了什么?我也尝试过 pool.close() 和 pool.join() 但没有效果。 这是我迄今为止
我尝试通过 apply_async 将共享计数器传递给多处理中的任务,但它失败并出现以下错误“RuntimeError:同步对象只能通过继承在进程之间共享”。这是怎么回事 def processLin
我有一个带有 apply_async 的进程池,其中不同的进程需要不同的时间来提供输出。一旦一个进程完成,我就会对其输出进行一些计算。在我想启动另一个进程之后。通过这种方式,我想创建一个无限循环,它启
这是我的代码: import multiprocessing import time import os def worker(): print str(os.getpid()) + " is
使用覆盖率来查看必须测试的内容,并且覆盖率显示旁边必须要测试的内容:send_alert.apply_async() 我知道是celery任务,但是有什么办法可以测试这行代码吗? 理解测试逻辑的其余代
传递给多处理的 apply_async() 的函数内的 print() 不会打印任何内容。 我想最终使用 apply_async 来处理大块的文本文件。因此,我希望脚本在屏幕上打印出已经处理了多少行。
我正在计算大量函数(大约1000000),并且由于它非常耗时,所以我使用multiprocessing.Pool.apply_async函数。但是,当我尝试使用 AsyncResult 类的 .get
import time import multiprocessing def multi_thread(files): q = multiprocessing.Queue() for
我一直在关注文档以尝试了解多处理池。我想到了这个: import time from multiprocessing import Pool def f(a): print 'f(' + st
我在我的应用程序中使用 celery 来运行周期性任务。让我们看下面的简单示例 from myqueue import Queue @perodic_task(run_every=timedelta(
我正在尝试了解使用多处理池的 apply_sync 方法时幕后发生的事情。 谁运行回调方法?是调用apply_async的主进程吗? 假设我发送了一大堆带有回调的 apply_async 命令,然后继
我有一个脚本,其中包括从列表中打开一个文件,然后对该文件中的文本执行某些操作。我正在使用 python 多处理和 Pool 来尝试并行化此操作。脚本的抽象如下: import os from mult
如果我理解正确,apply_async 会立即返回一个 AsyncResult 对象。如果我按以下方式收集这些对象,并仅在所有工作人员完成后才使用 get(),假设值将按照调用函数的顺序是否安全? o
我正在尝试使用 multiprocessing模块,更具体地说是 Pool.apply_async()功能。 这段代码运行良好: import multiprocessing def do():
我们使用的是 django 1.10、Celery 4.1.0 我正在尝试使用 apply_async。这是任务: from celery import Celery app = Celery('my
我在 Python 3.7.3 中遇到一个问题,在处理大型计算任务时,我的多处理操作(使用队列、池和 apply_async)会死锁。 对于小型计算,这个多处理任务工作得很好。然而,当处理较大的进程时
我想调用 pool.apply_async(func) 并在结果可用时立即累积结果,而无需相互等待。 import multiprocessing import numpy as np chrName
我是一名优秀的程序员,十分优秀!