python 線程異步執行踩坑

有個需求,一個線程在得到n個數據之后,異步地執行一個子線程函數,在子線程函數中完成數據庫的打開、寫入數據、關閉操作。在子線程函數返回前父線程先返回結果。
在此之前,先導入我們需要的模塊:

from concurrent.futures import ThreadPoolExecutor
import timeexecutor = ThreadPoolExecutor()

version1

百度了一下,參考這篇文章:python線程實現異步任務
這個代碼的執行結果如下:

def update_mysql(id):executor.submit(do_update)return "ok" + str(id)def do_update():time.sleep(3)print('start update')time.sleep(1)print("end")returnprint(update_mysql(1))
print(update_mysql(2))
print(update_mysql(3))
ok1
ok2
ok3
start update
start update
start update
end
end
end

version2

但是這個子線程函數是沒有添加參數的,如果我這樣寫:

def update_mysql(id):executor.submit(do_update(id))return "ok" + str(id)def do_update(id):time.sleep(3)print('start update' + str(id))time.sleep(1)print("end"+ str(id))returnprint(update_mysql(1))
print(update_mysql(2))
print(update_mysql(3))

結果如下:

start update1
end1
ok1
start update2
end2
ok2
start update3
end3
ok3

又變成同步了。

version3

后續又參考了這篇文章:python 之線程池傳入多個參數的方法 ThreadPoolExecutor.submit 多參數支持

from concurrent.futures import ThreadPoolExecutor
import timeexecutor = ThreadPoolExecutor()#調用方法
#實質就是通過lambda表達式過渡。傳入的參數是一個,但是通過lambda表達多后拆散為多個傳入。這是很巧妙的方法,實際 就是 *p 這個表達式。def update_mysql(id):args =[id,id,id]executor.submit(lambda p: doFileParse(*p),args)return "ok" + str(id)def doFileParse(filepath,segment,wordslist):time.sleep(3)print(filepath)time.sleep(1)print(segment)returnprint(update_mysql(1))
print(update_mysql(2))
print(update_mysql(3))

結果如下:

ok1
ok2
ok3
2
1
3
2
1
3

很顯然變成了異步執行了,但是卻不能保證按照開啟順序執行,但是由于我的子線程不需要保證順序執行,所以接下來也就不需要探究了。有解決方案的可以告知我一波。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376737.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于window.history.back()后退問題

Windows下的window.history.back()后退后返回的不僅僅是前一個頁而是前一個頁的狀態。假設一個頁我改動了3次那必須后退3次才干回到前一個頁。并且數據庫中刪除的數據依舊顯示在上面感覺很的不有用。 解決的方法:history.back()后再加一個reload()這樣就能夠回到刷新…

每日英語:Smog Levels in Hong Kong Hit Highs

Hong Kong’s pollution levels hit nearly decade-level highs this week, sending locals scurrying inside and obscuring the city’s skyline behind a blanket of white. scurry:急跑,急趕    In the city’s central business district, road…

轉載 | pymysql.err.InterfaceError: (0, ‘‘)解決辦法

導致這個錯誤的原因是通過pymysql連接MySQL,沒有關閉連接的操作,所以短時間內不會出問題,長時間保持這個連接會出現連接混亂。雖然看著自己的代碼沒錯,還是會報 pymysql.err.InterfaceError: (0, ‘’)錯誤。所以這個連接要么連上…

不使用物理引擎,自己動手做真實物理的模擬投籃游戲

最近打算做一個2D投籃游戲,由于對于BOX2D等物理引擎并不熟悉,加之一開始低估了游戲所需要的碰撞檢測復雜度,認為僅僅涉及4面墻,籃球,籃板,籃筐,籃網的碰撞檢測并不復雜。因此決定自己實現所需要…

GoldenGate DDL雙向復制

繼續上一篇的實驗。 節點說明&#xff1a; dd1(源庫)--->>kf2(目標庫) dd1(目標庫)<<---kf2(源庫) 在配置反向復制過程中&#xff0c;可暫時把源庫和目標庫調換位置&#xff0c;配置基本上雷同。 但在官網上有說明要注意的一個地方&#xff1a; Do ei…

轉載|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0

原文鏈接&#xff1a;https://www.cnblogs.com/heiao10duan/p/9373237.html 原因&#xff1a; 使用了多線程&#xff0c;多線程共享了同一個數據庫連接&#xff0c;但每個execute前沒有加上互斥鎖 方法&#xff1a; 方法一&#xff1a;每個execute前加上互斥鎖 lock.acquire…

JSF入門

1. 簡介 JSF技術是Sun公司在2004年發布的用于開發Web應用的框架。當前版本是2.2&#xff0c;由JSR344規范定義。它是Java EE 7推薦的Web標準框架。Mojarra(https://javaserverfaces.java.net/)是Oracle官方采用的JSF的參考實現&#xff0c;其他的參考實現還有Apache基金的MyFac…

nyist 488 素數環

有一個整數n&#xff0c;把從1到n的數字無重復的排列成環&#xff0c;且使每相鄰兩個數&#xff08;包括首尾&#xff09;的和都為素數&#xff0c;稱為素數環。 為了簡便起見&#xff0c;我們規定每個素數環都從1開始。例如&#xff0c;下圖就是6的一個素數環。 這題在進行判斷…

Android System分區大小異常

平臺&#xff1a;Freescale &#xff0f; Android 4.2.2 問題描述&#xff1a; 用 df 命令&#xff0c;看到/system分區大小275M。 用 busybox fdisk -l /dev/block/mmcblk0p5&#xff0c;看到 536M。 Freescale的刷機工具是Mfgtool&#xff0c;分區的動作在mksdcard-android.s…

python數據庫連接池使用

在轉載|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0這一篇中&#xff0c;我使用了方法一。接下來試試方法三&#xff0c;方法三和方法二其實意義差不多&#xff0c;但是對于數據庫的連接并不是交由程序員管理而是交由連接池管理了&#xff0…

.Net入門-部署問題

學習一門新的語言難免會遇到各種各樣的問題&#xff0c;總結一下。 測試環境&#xff1a;windows2008serverIIS7 開發環境: vs2010 問題1&#xff1a;"Unrecognized attribute targetFramework. Note that attribute names are case-sensitive. " 分析&#xff1a; 開…

pymysql.err.OperationalError: (1203, “User root already has more than ‘max_user_connections‘ active

max_connections 是指MySQL服務器的最大連接數。即所有用戶最大連接數的和。 max_user_connections 是指MySQL中單個用戶的最大連接數。 這里說明當前用戶的連接數大于了單個用戶的最大連接數&#xff0c;需要擴大連接數&#xff1a; mysql> show variables like %connect%…

北京行——JSP入門與Servlet精通

Servlet技術 用來動態生成 網頁數據資源Servlet生成HTML 頁面數據時&#xff0c;所有內容都是通過 response.getWriter response.getOutputStream 向瀏覽器輸出的 <html> <head> </head> <body> Hello </body></html> 用Servlet 輸出流打印…

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

可以參考一波&#xff1a;https://stackoverflow.com/questions/16573332/jsondecodeerror-expecting-value-line-1-column-1-char-0 1、json格式不對引起的錯誤 加上if json_rep.content:判空操作 json_rep requests.post(url monitor_url, headers monitor_header,json …

WINDOWS系統Eclipse+NDK+Android + OpenCv

WINDOWS系統EclipseNDKAndroid OpenCv 參考文檔博客 1 NDK環境搭建 http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html 2 官方文檔 Android.mk與Application.mk如何編寫&#xff0c;OpenCV庫如何調用 http://docs.opencv.org/trunk/doc/tutorials/introduction…

ural 1910. Titan Ruins: Hidden Entrance(Titan Ruins系列題目)

這是Titan Ruins系列第一道題&#xff0c;以后慢慢更新。 赤裸裸滴閱讀理解題&#xff0c;大意就是找到三個連在一起的數&#xff0c;使其之和最大&#xff0c;輸出的第一個數是這三個數的和&#xff0c;第二個數是中間那個數所在的位置。水題一道&#xff0c;很簡單。 1 #incl…

python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e

對于問題&#xff1a;python OSError: [Errno 24] Too many open files 原因:超出了進程同一時間最多可開啟的文件數. 解決方案P: 使用ulimit -n查看進程同一時間最多可開啟的文件數 mac默認是256&#xff0c;linux是1024 修改 sudo vim /etc/security/limits.conf 這個文件的最…

Android 之視頻監控

Android 視頻監控已經有示例了&#xff0c;如http://www.open-open.com/lib/view/open1346400423609.html完全可以實現簡單的監控功能。但是&#xff0c;如果想要在手機上監控另外一個手機就需要做一些改動了。 其中&#xff0c;手機A實現的功能和上文中的一樣&#xff0c;主要…

Max retries exceeded with url 解決方案

目錄問題解決方案keep alive 與close使用場景問題解決方案 在上一篇問題解決中&#xff1a;python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host‘‘, port80): Max retries e 有提到修改本地進程最大文件數來避免Max retries exceeded with url 報錯&…

正確理解JavaScript

過去幾年我注意到技術圈一個很奇怪的現象&#xff0c;有太多程序員將那些他們只是有過非常淺顯的了解&#xff0c; 但其實根本就不懂的技術寫到他們的簡歷中&#xff0c;這個現象幾乎每種語言都有&#xff0c;但這其中最嚴重的就要數javascript了。 你不知道你不懂 出現這種狀況…