一、_thread
例項:
import _thread
import time
#為執行緒定義乙個函式
def print_time(threadname, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print("%s: %s" %(threadname, time.ctime(time.time())))
#建立兩個執行緒
try:
_thread.start_new_thread(print_time, ("thread-1", 2,))
_thread.start_new_thread(print_time, ("thread-2", 4,))
except:
print("error")
while 1:
pass
二、threading
例項:
import threading
import time
class mythread (threading.thread):
def __init__(self, threadid, name, counter):
threading.thread.__init__(self)
self.threadid = threading
self.name = name
self.counter = counter
def run(self):
print("starting "+ self.name)
#獲得鎖,成功獲得鎖後返回ture
#可選的timeout引數不填時將一直阻塞直到獲得鎖定
#否則超時後將返回false
threadlock.acquire()
print_time(self.name, self.counter, 3)
#釋放鎖
threadlock.release()
def print_time(threadname, delay, counter):
while counter:
time.sleep(delay)
print("%s: %s"% (threadname, time.ctime(time.time())))
counter -= 1
threadlock = threading.lock()
threads =
#建立新執行緒
thread1 = mythread(1, "thread-1", 1)
thread2 = mythread(2, "thread-2", 2)
#開啟執行緒
thread1.start()
thread2.start()
#新增執行緒到執行緒列表
#等待所有執行緒完成
for t in threads:
t.join()
print("exiting main thread")
三、queue
例項:
import threading
import urllib.request
import time
import queue
start = time.time()
#設定最大程序數
max_queue = 2
class urlthread(threading.thread):
def __init__(self, name, counter, que):
threading.thread.__init__(self)
self.name = name
self.que = que
self.counter = counter
def run(self):
print("start " + self.name)
show(self.name, self.counter, 1)
print("exit "+self.name)
#讀佇列,timeout等待時間,從佇列中取出當前程序
self.que.get()
#在完成一項工作之後,queue.task_done()函式向任務已經完成的佇列傳送乙個訊號
self.que.task_done()
def show(name, counter, delay):
while counter:
time.sleep(delay)
print("%s:%s" %(name, time.ctime(time.time())))
counter -= 1
def main():
que = queue.queue(max_queue)
for i in range(3):
#寫入佇列
que.put(i)
thread = urlthread(i, 5, que)
thread.start()
#實際上意味著等到隊列為空,再執行別的操作
que.join()
print("over")
if __name__ == '__main__':
main()
主機網域名稱挖掘機:
import urllib.request
import threading
import time
import queue
start = time.time()
max_thread = 5
base_url = "kingcrazy.top"
open_url =
class find_thread(threading.thread):
def __init__(self, url, que):
threading.thread.__init__(self)
self.url = url
self.que = que
def run(self):
get_code(self.url)
self.que.get()
self.que.task_done()
def get_code(url):
print(url, end=":")
try:
response = urllib.request.urlopen(url)
code = response.getcode()
if code == 200:
print(200)
elif code == 302:
print(302)
except:
print(" url不存在")
def main():
print("開始查詢")
print("能夠訪問的子網域名稱")
for each in open_url:
print(each)
end = time.time()
print("總用時:%s"%(end-start))
if __name__ == '__main__':
main()
android 實現主線程 子執行緒雙向通訊
在 android 中,不可以在子執行緒中更新 ui 的操作,否則會報錯或者異常資訊。在這種情況下,我們會使用 handler 在 ui 執行緒建立該物件 接收子執行緒的訊息更新 ui.可以看出,這是子執行緒通知主線程,而主線程沒有直接通知子執行緒,那麼我們如何做到這一點?這樣有什麼好處?好處,很明...
主線程 子執行緒 通訊 最好用同步方式
從worker執行緒中顯示輸出 此刻我想先打個岔,請各位看看,如何讓 wo rker 執行緒把字串放到列表框 listbox 中。列表框的訊息迴圈總是被程式的主線程掌管,雖然這並非絕對必要,但是讓主線程負責所有的螢幕更新工作,是相當理想的。我在程式中定義了乙個訊息,名為 wm plea se upd...
WPF 多執行緒 子執行緒操作介面主線程的元素
1 在 中開啟乙個子執行緒 thread cabservice new thread new threadstart datareceiver cabservice.start 每隔2s 產生乙個資料 public void datareceiver thread.sleep 2000 2 定義 和...