定义线程
最简单的方法:使用target指定线程要执行的目标函数,再使用start()启动。
语法:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
group恒为None,保留未来使用。target为要执行的函数名。name为线程名,默认为Thread-N,通常使用默认即可。但服务器端程序线程功能不同时,建议命名。
#!/usr/bin/env python3 # coding=utf-8 import threading def function(i): print ("function called by thread {0}".format(i)) threads = [] for i in range(5): t = threading.Thread(target=function , args=(i,)) threads.append(t) t.start() t.join()
执行结果:
$ ./threading_define.py
function called by thread 0 function called by thread 1 function called by thread 2 function called by thread 3 function called by thread 4
确定当前线程
#!/usr/bin/env python3 # coding=utf-8 import threading import time def first_function(): print (threading.currentThread().getName()+ str(' is Starting \n')) time.sleep(3) print (threading.currentThread().getName()+ str( ' is Exiting \n')) def second_function(): print (threading.currentThread().getName()+ str(' is Starting \n')) time.sleep(2) print (threading.currentThread().getName()+ str( ' is Exiting \n')) def third_function(): print (threading.currentThread().getName()+ str(' is Starting \n')) time.sleep(1) print (threading.currentThread().getName()+ str( ' is Exiting \n')) if __name__ == "__main__": t1 = threading.Thread(name='first_function', target=first_function) t2 = threading.Thread(name='second_function', target=second_function) t3 = threading.Thread(name='third_function',target=third_function) t1.start() t2.start() t3.start()
执行结果:
$ ./threading_name.py
first_function is Starting second_function is Starting third_function is Starting third_function is Exiting second_function is Exiting first_function is Exiting
配合logging模块一起使用:
#!/usr/bin/env python3 # coding=utf-8 import logging import threading import time logging.basicConfig( level=logging.DEBUG, format='[%(levelname)s] (%(threadName)-10s) %(message)s', ) def worker(): logging.debug('Starting') time.sleep(2) logging.debug('Exiting') def my_service(): logging.debug('Starting') time.sleep(3) logging.debug('Exiting') t = threading.Thread(name='my_service', target=my_service) w = threading.Thread(name='worker', target=worker) w2 = threading.Thread(target=worker) # use default name w.start() w2.start() t.start()
执行结果:
$ ./threading_names_log.py[DEBUG] (worker ) Starting
[DEBUG] (Thread-1 ) Starting [DEBUG] (my_service) Starting [DEBUG] (worker ) Exiting [DEBUG] (Thread-1 ) Exiting [DEBUG] (my_service) Exiting
在子类中使用线程
前面我们的线程都是结构化编程的形式来创建。通过集成threading.Thread类也可以创建线程。Thread类首先完成一些基本上初始化,然后调用它的run()。run()方法会会调用传递给构造函数的目标函数。
#!/usr/bin/env python3 # coding=utf-8 import logging import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print ("Starting " + self.name) print_time(self.name, self.counter, 5) print ("Exiting " + self.name) def print_time(threadName, delay, counter): while counter: if exitFlag: thread.exit() time.sleep(delay) print ("%s: %s" %(threadName, time.ctime(time.time()))) counter -= 1 # Create new threads thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # Start new Threads thread1.start() thread2.start() print ("Exiting Main Thread")
执行结果:
$ ./threading_subclass.py
Starting Thread-1 Starting Thread-2 Exiting Main Thread Thread-1: Tue Sep 15 11:03:21 2015 Thread-2: Tue Sep 15 11:03:22 2015 Thread-1: Tue Sep 15 11:03:22 2015 Thread-1: Tue Sep 15 11:03:23 2015 Thread-2: Tue Sep 15 11:03:24 2015 Thread-1: Tue Sep 15 11:03:24 2015 Thread-1: Tue Sep 15 11:03:25 2015 Exiting Thread-1 Thread-2: Tue Sep 15 11:03:26 2015 Thread-2: Tue Sep 15 11:03:28 2015 Thread-2: Tue Sep 15 11:03:30 2015 Exiting Thread-2
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“在Python中通过threading模块定义和调用线程的方法”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2025年04月26日
2025年04月26日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]