我想在TemplateView中使用concurrent.futures異步執行某些工作單元。然而,我遇到了我的異步代碼沒有被調用的問題。我在這裏做錯了什麼?這是一個示例代碼,它只是乘以一個數字,但實際上我想要異步地複製背景中的某些文件。任何幫助是極大的讚賞!django在TamplateView問題中使用期貨
import concurrent.futures
import time
class AsyncTest(TemplateView):
def get(self, request, *args, **kwargs):
op = kwargs.get('op')
if op == 'asynch':
print 'using futures async'
executor = concurrent.futures.ThreadPoolExecutor(max_workers=1)
# I see this print message
print 'executing future 1 time'
executor.map(self.load, 10)
return render(request, 'text.html', {'lines':'Performing async processing!', 'op':op})
else:
return HttpResponseBadRequest("Operation not implemented at this time (op=%s)" % op)
def load(x):
#I never see this get invoked
print 'in load...sleep'
time.sleep(2)
print 'sqr x*x=%s of x=%s' %((x*x), x)
return x*x
我從來沒有看到任何從服務器的負載方法印刷,只是頁面呈現印有最後一件事:「執行未來1周時間」
感謝您的有見地的評論文森特。我實際上最終使用了django-芹菜和期貨。我將芹菜用於異步處理邏輯,然後使用Future:ThreadPoolExecutor同時將多個文件加載到HDFS中。我來自Java世界,所以python對我來說是新的,所以放棄早期可能只是沮喪,無論如何,我開始越來越多地挖掘python。 – Marcin