2015-12-10 61 views
0

我想知道是否有創建可以使用Django的進口和並行地從一個Python shell中運行自定義腳本任何可能的方式。例如,假設我可以在外殼上寫:如何並行運行自定義腳本和Django

@make_it_parallel 
def my_custom_task(): 
    from mydjangomodule.models import myclass 
    # do something 

for user_range in range(0, 1000, 10): 
    my_custom_task.delay(user_range) 

的主要問題是「如何輕鬆實現通過腳本並行」,而不必推東西的生產或建立了一套完整的工具進行只需運行一次的腳本。

Pd積:如果除了IPython的另一個工具/芹菜,可以做的工作,我會聽到它的興趣。

+0

的是,在意見? –

+0

沒有,這是一個Django殼運行'./manage.py shell' – Hassek

+0

不要ü需要從應用程序中運行呢?如果不是,你不能只創建一個自定義的Django命令? –

回答

1

我最終用ipython並行化django腳本ipyparallel包,下面是如何做到這一點!

首先你需要安裝ipyparallel:從IPython中(或者您喜歡的任何配置文件)的默認配置文件pip install ipyparallel -U

我們需要添加這個啓動進口加載的Django:

from MyProject import settings 
import django 
django.setup() 

這應該被添加到這樣的路徑:~/.ipython/profile_default/startup/00-load-django.py

這將加載django您需要啓動的引擎,以便ipython可以並行您的功能。

現在,讓我們開始的發動機,將能夠並行編碼上飛你的Django的腳本,一定要在主文件夾從Django項目(其中manage.py文件):ipcluster start -n X,其中X將是想要的引擎數量(恕我直言,它將是當前計算機內核的數量+1)

請讓ipcluster在進入ipython之前完全運行。

現在,讓並行化Django的腳本,進入IPython中:

import ipyparallel as ipp 
rc = ipp.Client() # Create the client that will connect to the ipython engines 
lview = rc.load_balanced_view() 

@lview.parallel() 
def show_polls(user_range): 
    from poll.models import Poll 
    return list(Poll.objects.filter(user_id__gte=user_range, user_id__lt=user_range+100)) 

for res in show_polls.map(range(0, 1000, 100)): 
    print res 

而且我們去,Django的腳本並行!請注意,我將QuerySet轉換爲列表,這是因爲返回的任何內容都必須是可選的。