【问题标题】:Django Multiprocessing oddityDjango 多处理异常
【发布时间】:2012-10-25 16:49:12
【问题描述】:

在使用 ./manage.py shell 来练习一些代码时,我遇到了一些我不理解的东西。

Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from multiprocessing import Process
>>> from django.core.management import call_command
>>> p = Process(target=call_command("processphoto", 1000))
Successfully populated photo "1000"  (This is output from my processphoto command)
>>>

我从来没有机会做p.start() 或在流程中设置任何其他变量。它似乎在实例化时执行。当我尝试使用我认为的代码时,我似乎根本没有产生多个进程,一切都保留在一个核心上。

我做错了什么,或误解了什么?我想在单独的进程中生成单独的manage.py processphoto 命令以充分利用多核服务器。

【问题讨论】:

    标签: python django multithreading multiprocessing multiprocess


    【解决方案1】:

    call_command(...) 调用该函数。相反,将函数对象 call_command 及其参数分别传递给 Process

     p = Process(target=call_command, args = ("processphoto", 1000))
    

    【讨论】:

    • 噢!天哪,你会认为我是第一次接触新手...谢谢。
    • 不用担心。您只看到一次就知道了。
    • 请注意,这样做会复制所有子节点之间的数据库连接,并可能导致问题。我之所以提出这一点,是因为我所有的命令脚本都有某种数据库交互。这是一个线程,它阐明了这个问题,并提出了一些帮助建议:[Django multiprocess database connection][1] [1]: stackoverflow.com/questions/8242837/…
    • 当一个进程是从一个模块生成的并且在模块的全局命名空间中定义了一个打开的连接时,就会出现您警告的问题。这个问题没有提到任何打开的数据库连接。所以虽然你的警告是真的,但我认为它与这里处理的问题或答案没有太大关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2018-08-25
    相关资源
    最近更新 更多