因此需要使用return对你想在makegreat函数局部变量被销毁之后继续使用的变量的值进行拷贝,有点绕666 。保存拷贝下来的值不被销毁,而赋给tt使用 。这是为什么要使用return 。
python线程怎么销毁【Python】线程的创建、执行、互斥、同步、销毁
还是《【Java】利用synchronized(this)完成线程的临界区》(点击打开链接)、《【Linux】线程互斥》(点击打开链接)、《【C++】Windows线程的创建、执行、互斥、同步、销毁》(点击打开链接)中的设置多个线程对一个ticket进行自减操作python函数销毁,用来说明Python中多线程的运用,涉及的创建、执行、互斥、同步、销毁问题 。
运行结果如下,还是差不多,运行三次,每次的运行结果,每个线程最终的得票结果是不同的,但是4个线程最终“得票”的总和为 ticket 最初设置的值为100000,证明这4个线程成功实现python函数销毁了互斥 。
虽然每次运行结果是不同,但是可以看得出每次运行结果大抵上是平均的 。貌似Python对线程作系统资源的处理,比Java要好 。
然而,Python总要实现多线程 , 代码并不像想象中简单,具体如下:
[python] view plain copy print?在CODE上查看代码片派生到我的代码片
# -*-coding:utf-8-*-
import threading;
mutex_lock = threading.RLock();# 互斥锁的声明
ticket = 100000;# 总票数
# 用于统计各个线程的得票数
ticket_for_thread1 = 0;
ticket_for_thread2 = 0;
ticket_for_thread3 = 0;
ticket_for_thread4 = 0;
class myThread(threading.Thread):# 线程处理函数
def __init__(self, name):
threading.Thread.__init__(self);# 线程类必须的初始化
self.thread_name = name;# 将传递过来的name构造到类中的name
def run(self):
# 声明在类中使用全局变量
global mutex_lock;
global ticket;
global ticket_for_thread1;
global ticket_for_thread2;
global ticket_for_thread3;
global ticket_for_thread4;
while 1:
mutex_lock.acquire();# 临界区开始 , 互斥的开始
# 仅能有一个线程↓↓↓↓↓↓↓↓↓↓↓↓
if ticket0:
ticket -= 1;
# 统计哪到线程拿到票
print "%s抢到了票!票还剩余:%d 。" % (self.thread_name, ticket);
if self.thread_name == "线程1":
ticket_for_thread1 += 1;
elif self.thread_name == "线程2":
ticket_for_thread2 += 1;
elif self.thread_name == "线程3":
ticket_for_thread3 += 1;
elif self.thread_name == "线程4":
ticket_for_thread4 += 1;
else:
break;
# 仅能有一个线程↑↑↑↑↑↑↑↑↑↑↑↑
mutex_lock.release();# 临界区结束,互斥的结束
mutex_lock.release();# python在线程死亡的时候,不会清理已存在在线程函数的互斥锁 , 必须程序猿自己主动清理
print "%s被销毁了!" % (self.thread_name);
# 初始化线程
thread1 = myThread("线程1");
thread2 = myThread("线程2");
thread3 = myThread("线程3");
thread4 = myThread("线程4");
# 开启线程
thread1.start();
thread2.start();
thread3.start();
thread4.start();
# 等到线程1、2、3、4结束才进行以下的代码(同步)
thread1.join();
thread2.join();
thread3.join();
thread4.join();
print "票都抢光了,大家都散了吧!";
print "=========得票统计=========";
print "线程1:%d张" % (ticket_for_thread1);
print "线程2:%d张" % (ticket_for_thread2);
print "线程3:%d张" % (ticket_for_thread3);
print "线程4:%d张" % (ticket_for_thread4);
1、从上面的代码可以看出,在Python2.7中要使用线程必须使用threading而不是古老的thread模块 。
推荐阅读
- magicui3可以申请鸿蒙系统吗,magic 3升级鸿蒙
- chatgpt写案例,写案例的步骤
- phpcms远程连接数据库,php 调用远程文件
- 色的直播平台软件下载,恢复快手直播平台的软件下载
- vb.net扫描枪编程 usb扫描枪编程
- 为什么要教c语言,为什么要学好c语言
- 木门网站制作,木门设计软件
- 赛车手机游戏推荐联机游戏,联机的赛车手游
- 韩顺平代码java 韩顺平玩转oracle