Python concurrent.futures - 未调用方法

标签 python django multithreading

我正在使用以下代码运行本地 django 服务器:

import concurrent.futures

media_download_manager = concurrent.futures.ProcessPoolExecutor(max_workers=2)

def hello():
    print "hello"


for i in range(1, 1000):
    print "submitting task "
    media_download_manager.map(hello)

我正在初始化一个进程池执行器来接受具有 2 个工作线程的任务。任务正在提交,但处理提交任务的工作线程似乎没有触发。

接着是控制台输出:

submitting task 1
submitting task 2
submitting task 3
submitting task 4
submitting task 5
submitting task 6
submitting task 7
submitting task 8
submitting task 9
Performing system checks...

System check identified no issues (0 silenced).
October 15, 2016 - 06:09:31
Django version 1.8.4, using settings 'Learn.settings'
Starting development server at http://192.168.1.3:8000/
Quit the server with CONTROL-C.

我在这里错过了什么?

最佳答案

The Executor.map function旨在将参数从可迭代对象传递给映射函数。您没有提供任何可迭代对象,因此它不会运行(并且您的函数不接受任何参数,因此如果您提供了可迭代对象,它会在传递太多参数时失败)。

如果你只是想多次不带参数地运行那个函数,调用submit ; map 旨在传递参数并从返回的结果中累积结果,而不仅仅是为了产生副作用而运行某些东西(它是一种函数式编程工具,函数式代码通常没有副作用)。

固定代码为:

futures = []
for i in range(1, 1000):
    print "submitting task "
    futures.append(media_download_manager.submit(hello))
concurrent.futures.wait(futures)  # Wait for all tasks to finish

关于Python concurrent.futures - 未调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055652/

相关文章:

jquery - 如何在 Django/Wagtail 中检索 cookie 以设置 Python 变量

java - 如何先完成Thread_Square然后完成Thread_Cube

python - 为什么 user.is_superuser 在 Django 模板中返回字符串?

python - 使用@tornado.web.stream_request_body上传文件

python - google API - python oauth2 应用程序身份验证

python - 准备在 UNIX 环境中运行的 Python 程序

使用 ffprobe 对 NamedTemporaryFile 拒绝 Python 权限

c++ - 为什么我的 OpenMP 代码在不同环境下性能不同?

.net - CLI库代码Thread Safe中的Comparer类是否安全?

python - hadoop中的语法错误: word unexpected (expecting "do") map. py