我在使用執行緒同時執行功能的程式中遇到錯誤,此程序是每小時運行一次的作業,傳入的資料來自 sql 中的視圖。
在目標arg 中呼叫的函式回傳一個字典并說“dict 物件不可呼叫”。在函式內部,回傳一個字典。我的疑問是這個函式應該回傳什么,如果我不回傳任何東西會影響其他執行緒嗎?
# inside the jobs in django I call this function
def ticket_booking():
query = " SELECT * FROM vw_ticket_list;"
ttd = []
try:
result = query_to_dicts(query)
tickets = json.loads(to_json(result))
if tickets:
# Calling the vaccination push message (php).
for ticket in tickets:
# Getting Generic details used by all categories
full_name = tickets['full_name']
gender = tickets['gender']
email =tickets[email]
if tickets['language_id'] == 1: # book english movie tickets
# Calling the function inside the Thread for a Syncronuz Call (Wait and Watch)
myThread = threading.Thread(target=book_english(email, full_name))
myThread.start()
myThread.join()
if tickets['language_id'] == 2: # book italian movie tickets
myThread = threading.Thread(target=book_italian( email, full_name, gender))
myThread.start() # Starting the Thread
myThread.join() #Will return here if sth is returned
正如你在代碼注釋中看到的,如果 book italian 函式回傳 sth,那么它才可以回傳這里,我總共有 5 個執行緒同時執行, book italian 函式是這樣的:
def book_italian(email,fullname,gender):
try
# posts data to another server #
b=requests.post(some postdata)
a =log.objects.create(log data from b in crct format)
return a--->{"Message":"Log created successfully"}
a 是型別類 dict,我嘗試將其更改為多種型別仍然給我同樣的錯誤,在 crontab 中運行時,此作業未運行。
uj5u.com熱心網友回復:
當你threading.Thread用來執行某事時,你應該將target可呼叫物件(如函式)和對應的arguments(引數)分開,然后分別傳遞它們:
myThread = threading.Thread(target=book_italian, args=(email, full_name, gender))
請參閱檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334399.html
下一篇:DjangoRESTFramework:ModelSerializer是否可以選擇通過GET或(POST、PUT、DELETE)動態更改欄位?
