【Python-随笔】 Python创建多线程
2023-12-23 06:22:45
Python
创建多线程-随笔
Python创建多线程的三种方法
_thread
模块函数式创建线程threading
模块函数式创建线程- 继承
threading
类创建线程
_thread
模块函数式创建线程
【说明】
- 调用
_thread
模块中的start_new_thread()
函数来产生新线程;
【函数】
_thread.start_new_thread ( function, args[, kwargs] )
《参数说明》
function
:线程函数。args
:传递给线程函数的参数,必须是个tuple
类型。kwargs
:可选参数。
【示例】
《代码01》
# -*- coding:utf-8 -*-
import _thread
import time
def a(p):
for i in range(5):
print(p)
time.sleep(0.5)
def b(p):
for i in range(5):
print(p)
time.sleep(0.2)
if __name__ == '__main__':
_thread.start_new_thread(a, ('我是线程A',))
_thread.start_new_thread(b, ('我是线程B',))
while True:
pass
《结果01》
我是线程A
我是线程B
我是线程B
我是线程B
我是线程A
我是线程B
我是线程B
我是线程A
我是线程A
我是线程A
Process finished with exit code -1
threading模块函数式创建线程
【说明】
- 创建线程时,传入一个函数,用于线程执行,比起通过类继承创建多线程,函数式创建线程有更好的灵活性。
【示例】
《代码01》
# encoding:utf-8
import threading
import time
import random
def run(sec):
time.sleep(sec)
print('当前线程的名字是: ', threading.current_thread().name)
if __name__ == '__main__':
print('这是主线程:', threading.current_thread().name)
thread_list = []
'''创建多个线程'''
for i in range(5):
t = threading.Thread(target=run, args=(random.random(),))
thread_list.append(t)
# 循环这5个线程,调用相应的run方法
for t in thread_list:
t.start()
《结果01》
这是主线程: MainThread
当前线程的名字是: Thread-2 (run)
当前线程的名字是: Thread-4 (run)
当前线程的名字是: Thread-3 (run)
当前线程的名字是: Thread-5 (run)
当前线程的名字是: Thread-1 (run)
Process finished with exit code 0
继承threading
类创建线程
【说明】
- 继承线程类
threading.thread
,再重载成员函数run
,程序处理的代码写在函数run
中,最后再调用start()
方法来运行线程
【示例】
《代码01》
# -*- coding:utf-8 -*-
import threading
import time
class A(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for i in range(5):
print('我是线程A', threading.current_thread().getName())
time.sleep(0.5)
class B(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for i in range(5):
print('我是线程B', threading.current_thread().name)
time.sleep(0.2)
t1 = A()
t1.start()
t2 = B()
t2.start()
《结果01》
我是线程A Thread-1
我是线程B Thread-2
D:\MY_APP\Project\PythonProject\DuoXianCheng\deom.py:18: DeprecationWarning: getName() is deprecated, get the name attribute instead
print('我是线程A', threading.current_thread().getName())
我是线程B Thread-2
我是线程B Thread-2
我是线程A Thread-1
我是线程B Thread-2
我是线程B Thread-2
我是线程A Thread-1
我是线程A Thread-1
我是线程A Thread-1
Process finished with exit code 0
《注释01》
- 获得当前线程的名称:
threading.current_thread().getName()
- 获得当前线程的名称:
threading.current_thread().name
关于threading
和thread
的使用总结:
threading 模块
threading
是对thread
模块的再封装threading
模块支持守护线程threading.Thread(target,args)
创建线程,但没有启动线程start()
开启线程join()
挂起线程- 当主线程执行完退出时,默认重要的子线程完成后再退出
thread模块
_thread.start_new_thread()
方法不仅创建了线程而且启动了线程- 当主线程执行完退出时,其他的线程都会无警告,无保存的死亡
补充说明
- 暂时没有时间做细致的探究和说明,有时间再写;
文章来源:https://blog.csdn.net/HIGK_365/article/details/135163686
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!