2012-11-05 75 views
2

在使用./manage.py shell來鍛鍊一些代碼時,我遇到了一些我不明白的東西。Django多處理奇數

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命令以充分利用多核服務器。

回答

2

call_command(...)調用函數。相反,單獨傳遞函數對象,call_command,其參數Process

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

衛生署!好主,你會認爲我是第一次新手......謝謝。 –

+0

不用擔心。你看到這一次,並永遠知道它。 – unutbu

+0

請注意,這樣做會複製所有孩子之間的數據庫連接,並可能導致問題。我只提出這一點,因爲我的所有命令腳本都有某種數據庫交互。 這裏是揭示了這個問題的一些光一個線程,並提出了一些建議,以幫助: [Django的多進程數據庫連接] [1] [1]:http://stackoverflow.com/questions/8242837/django-multiprocessing-and-database-connections –