日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 线程 的类库_python类库32[多线程]

發布時間:2023/12/4 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 线程 的类库_python类库32[多线程] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 python 多線程

因為CPython的實現使用了Global Interpereter Lock(GIL),使得python中同一時刻只有一個線程在執行,從而簡化了python解釋器的實現,且python對象模型天然地線程安全。如果你想你的應用程序在多核的機器上使用更好的資源,建議使用multiprocessing或concurrent.futures.processpoolexecutor。但是如果你的程序是IO密集型,則使用線程仍然是很好的選擇。

二 python 多線程使用的兩種方法

實例:

import?threading

import?time

def?worker(num):

print?(threading.currentThread().getName()?+?'start')

time.sleep(10)

print?(threading.currentThread().getName()?+?'running')

print?(threading.currentThread().getName()?+?""?+?str(num))

print?(threading.currentThread().getName()?+?'exit')

def?deamon():

print?(threading.currentThread().getName()?+?'start')

time.sleep(20)

print?(threading.currentThread().getName()?+?'running')

print?(threading.currentThread().getName()?+?'exit')

print(threading.currentThread().getName())

d?=?threading.Thread(name='deamon',?target=deamon)

d.setDaemon(True)

d.start()

w?=?threading.Thread(name='worker',?target=worker,?args=(10,))

w.start()

class?myWorker(threading.Thread):

def?__init__(self,?num):

threading.Thread.__init__(self)

self.num?=?num

self.thread_stop?=?False

def?run(self):

print?(self.getName()+'start')

time.sleep(30)

print?(self.getName()+'running')

print?(self.getName()+""?+?str(self.num))

print?(self.getName()+'exit')

mw?=?myWorker(30)

mw.setName("MyWorker")

mw.start()

print(threading.currentThread().getName())

print("All?threads:")

print("------------")

for?th?in?threading.enumerate():

print(th.getName())

print("------------")

d.join()

w.join()

mw.join()

print(threading.currentThread().getName())

運行結果如下:

1)python線程使用的兩種方法:

**直接調用threading.Thread來構造thread對象,Thread的參數如下:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})

group為None;

target為線程將要執行的功能函數;

name為線程的名字,也可以在對象構造后調用setName()來設定;

args為tuple類型的參數,可以為多個,如果只有一個也的使用tuple的形式傳入,例如(1,);

kwargs為dict類型的參數,也即位命名參數;

**實現自己的threading.Thread的子類,需要重載__init__()和run()。

2)threading.Thread對象的其他方法:

start(),用來啟動線程;

join(), 等待直到線程結束;

setDeamon(), 設置線程為deamon線程,必須在start()調用前調用,默認為非demon。

注意: python的主線程在沒有非deamon線程存在時就會退出。

3)threading的靜態方法:

threading.current_thread() , 用來獲得當前的線程;

threading.enumerate() , 用來多的當前存活的所有線程;

threading.Timer 定時器,其實是thread的一個字類型,使用如下:

def hello(): print("hello, world")

t = Timer(30.0, hello)

t.start()

4)logging是線程安全的

logging 模塊是線程安全的,所以可以使用logging來幫助調試多線程程序。

import logging

logging.basicConfig(level=logging.DEBUG,

format="(%(threadName)-10s : %(message)s",

)

logging.debug("wait_for_event_timeout starting")

完!

總結

以上是生活随笔為你收集整理的python 线程 的类库_python类库32[多线程]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。