- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
python 3.6.6
这是代码:
import asyncio
import time
from concurrent.futures import ProcessPoolExecutor
executor_processes = ProcessPoolExecutor(2)
def calculate():
while True:
print("while")
time.sleep(1)
async def async_method():
loop_ = asyncio.get_event_loop()
loop_.run_in_executor(executor_processes, calculate)
await asyncio.sleep(1)
print("finish sleep")
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(async_method())
print("main_thread is finished")
while
finish sleep
main_thread is finished
while
while
...
import asyncio
import time
import multiprocessing
def calculate():
while True:
print("while")
time.sleep(1)
async def async_method():
proc = multiprocessing.Process(target=calculate)
proc.daemon = True
proc.start()
await asyncio.sleep(1)
print("finish sleep")
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(async_method())
print("main_thread is finished")
while
finish sleep
main_thread is finished
loop_.run_in_executor(executor_processes, calculate)
“类似守护进程”的行为?
最佳答案
您显示的代码显然只是一个小示例,用于演示您希望实现的目标。我们不知道您的实际任务/问题。但老实说,我不相信你在这里走的是正确的道路。ProcessPoolExecutor
是 concurrent.futures
的一部分标准库包。它返回一个 Future
调用时发送给调用者 submit()
.那个Future
是尚未完成的计算结果的代理。这是一个 promise ;尽管在这种情况下该术语在技术上并不完全正确。见 Wiki page为了区别。
这意味着,计算应在有限时间内完成并产生结果。这就是 ThreadPoolExecutor
的原因。和 ProcessPoolExecutor
Python 中的实现不允许您生成守护进程。要求一个你实际上并不想要实现的结果的 promise 没有多大意义。
你怎么还能实现你的目标?
1 - 子类 ProcessPoolExecutor
? 可以拦截新进程的创建和启动,潜入p.daemon = True
在 _adjust_process_count()
.但是,由于 concurrent.futures
设计时没有考虑到无限期运行的任务,这不会有太大帮助。不像 multiprocessing
, concurrent.futures.process
定义一个 exit handler不考虑守护进程。它只是试图 join()
一切,这可能需要一些时间来无限循环。
2 - 定义您自己的退出处理程序! 两者都可以,multiprocessing
和 concurrent.futures.process
do:定义一个退出处理程序,在您的 Python 进程即将关闭时进行清理。 atexit可以提供帮助:
import atexit
executor_processes = ProcessPoolExecutor(2)
def calculate():
while True:
print("while")
time.sleep(1)
def end_processes():
[proc.terminate() for proc in multiprocessing.active_children()]
async def async_method():
[...]
if __name__ == '__main__':
atexit.register(end_processes)
loop = asyncio.get_event_loop()
[...]
terminate()
.
kill()
是你最后的手段。
关于python - 如何使 ProcessPoolExecutor 中的任务表现得像守护进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237493/
python ProcessPoolExecutor 在命令行中工作,但添加到函数后不运行 它是这样工作的 from concurrent import futures def multi_proce
如果父进程因任何原因终止,有没有办法使 concurrent.futures.ProcessPoolExecutor 中的进程终止? 一些细节:我在处理大量数据的作业中使用 ProcessPoolEx
这是我关于 stackoverflow 的第一个问题。我基本上能够在这里找到我需要知道的东西。顺便说一句,非常感谢。 但是。如果我尝试终止我的 ProcessPoolExecutor,它只会在生成的整
我有一个代码,它从 gstorage 下载文件,将它们转储到 json,然后将该 json 转为 csv,然后转为 parquet,最后上传到 aws s3(不要问为什么我不是写它的人)。 我从我的日
ESPNP 播放器免费 class ESPNPlayerFree: def __init__(self, player_id, match_id, match_id_team): ... 团队列表1:
在本文档 ( https://pymotw.com/3/concurrent.futures/ ) 中说: “ProcessPoolExecutor 的工作方式与 ThreadPoolExecutor
我正在创建一个多处理程序来处理多个批处理,但我的日志记录无法将批处理记录到日志文件中,只会记录根 log.info,如何设置日志记录以正确打印到日志文件? 日志只会打印这样一行"INFO:root:t
我正在尝试使用一个单独的进程通过并发 future 流式传输数据。然而,另一方面,有时对方会停止数据馈送。但只要我重新启动这个 threadable 然后它就会再次工作。所以我设计了这样的东西,以便能
设置 我设置了一个函数来接收多个关键字参数: def process(image, folder, param1, param2, param3): do_things return
from concurrent.futures import ProcessPoolExecutor import os import time def parInnerLoop(item):
python 3.6.6 这是代码: import asyncio import time from concurrent.futures import ProcessPoolExecutor exe
我是一般并行化的新手,特别是 concurrent.futures。我想对我的脚本进行基准测试并比较使用线程和进程之间的差异,但我发现我什至无法运行它,因为在使用 ProcessPoolExecuto
代码: if __name__ == "__main__": p = ProcessPoolExecutor() p.submit(lambda x: print(x), "somet
代码: if __name__ == "__main__": p = ProcessPoolExecutor() p.submit(lambda x: print(x), "somet
我想在多进程环境中记录到单个文件。我可以得到 sample code从 python 日志记录手册开始工作。但是当我替换为 ProcessPoolExecutor 时,它不起作用。 # work
我正在尝试使用新的 Tornado queue对象以及 concurrent.futures允许我的网络服务器将 CPU 密集型任务传递给其他进程。我想访问从 concurrent.futures 模
我有一个 python 函数正在调用我无法控制或更新的 C 库。不幸的是,C 库存在间歇性错误,有时会挂起。为了防止我的应用程序也挂起,我尝试隔离 ThreadPoolExecutor 或 Proce
我最近开始使用 Python 的多线程和多处理功能。 我尝试编写代码,使用生产者/消费者方法从 JSON 日志文件中读取 block ,将这些 block 作为事件写入队列,然后启动一组将从该队列中轮
我有一大堆必须以某种方式处理的元素。我知道可以通过以下方式使用多处理过程来完成: pr1 = Process(calculation_function, (args, )) pr1.start() p
if __name__ == '__main__': MATCH_ID = str(doc_ref2.id) MATCH_ID_TEAM = doc_ref3.id with
我是一名优秀的程序员,十分优秀!