count已经设置了全局变量,下面的为什么没反应,有没有什么方法可以让它也改变值
#coding=utf-8 from threading import Thread from threading import Event from time import sleep from random import randint global count # 设置了全局变量 def door(): while True: if even.is_set(): print("门已经开启,快进入") sleep(1) # even.wait if count > 3: print("超过3秒,门自动关闭") even.clear() else: count = 0 print("门已关闭") # even.clear(): 写错了 ,门是被动的,人来了门就会开启,所以应该用wait. even.wait() count += 1 def person(): num = 0 while True: num += 1 if even.is_set(): print(f"门开着的,进去{num}人") count = 0 # 这个数值没办法给上面传输过去 else: even.set() print(f"{num}刷卡开门通行") sleep(randint(1, 10)) if __name__ == "__main__": # 先开2个线程 even = Event() t1 = Thread(target=door) t2 = Thread(target=person) t1.start() t2.start()
老师,请问上面的是父进程对吧,然后p1和p2是我们创建的两个子进程对吧,那run方法怎么理解呢?run也是进程嘛?他和p1和p2是什么关系呢?
from multiprocessing import Process from time import sleep class MyProcess(Process): def __init__(self,name): Process.__init__(self) self.name=name def run(self): print(f'{self.name}开始。。。') sleep(2) print(f'{self.name}结束。。。') if __name__=="__main__": p1=MyProcess('p1') p2=MyProcess('p2') p1.start() p2.start()
老师,请问这块代码怎么理解呢,是类的固定写法嘛?还有就是为什么要把func1改写成run呢?
from multiprocessing import Process from time import sleep def func1(name): print(f'{name}开始。。。') sleep(2) print(f'{name}结束。。。') if __name__=="__main__": p1=Process(target=func1,args=('p1',)) p1.start()
老师,请问args的那个格式是在进程里面是固定的嘛?和线程类似?
from threading import Thread from queue import Queue #导入队列,保证数据安全 from time import sleep #生产者 def producer(): num = 1 while True: print(f'生产了{num}号加菲猫') mq.put("第{}号加菲猫".format(num)) num += 1 sleep(1) #消费者 def cousmer(): while True: print("购买了{}".format(mq.get())) sleep(2) if __name__=="__main__": #创建一个共享容器 mq = Queue() #创建线程 t1 = Thread(target=producer) t2 = Thread(target=cousmer) #t3 = Thread(target=cousmer) #开启线程 t1.start() t2.start() #t3.start()
老师,为什么我的生产1号和2号是生产就购买呢?从3号开始才是两个生产一个购买?
老师,是只有greenlet模块才能用switch吗
老师,解释一下代码的执行顺序呗,我有点忘了
老师,这里为什么是子进程呢
老师,报错没有传name之后,为什么加了args=p1之后就行了
老师,这条语句只能写在第17行吗
老师,print后面的语句是什么意思呢
from threading import Thread from time import sleep from threading import Event from random import randint def door(): global state while True: if event.is_set(): print("门开着,可以通行") sleep(1) else: state = 0 print("门关了,请刷卡") event.wait() sleep(1) state += 1 if state > 3: print("超过3秒,门自动关闭") event.clear() def person(): global state num=1 while True: if event.is_set(): print(f"门开着,{num}号人进入!!") else: print(f"门关着,{num}号人刷卡进入!!") event.set() state = 0 num += 1 sleep(randint(1,10)) if __name__=="__main__": state = 0 event = Event() t1 = Thread(target=door) t2 = Thread(target=person) t1.start() t2.start()
老师,我想请问一下,就是t1和t2执行完else的语句结束后,为什么t1这里要打印两次门开着呢?不应该是t1和t2再同时执行if的语句块嘛?还有就是超过3秒到底是怎么样的逻辑啊?有点混了
from threading import Thread from time import sleep from threading import Event def car(): global count while True: if count % 5 != 0: print("车已到站,可以上车") sleep(1) count += 1 else: print("车开走了") sleep(6) count = 1 def person(): while True: if count % 5 != 0: print("大家可以上车了") sleep(1) else: print("等待") sleep(1) if __name__=="__main__": #count值来判断车是否已经到站 count = 1 t1 = Thread(target=car) t2 = Thread(target=person) t1.start() t2.start()
老师,我想请问一下,就是在运行五次以后,t1提示了车开走了,这里就只有一次,为什么t2要提示五次等待呢?
能否把这一章节的代码内容按照课程内容编号重新整理一下呢?
这一章视频内演示代码的文件题目和给的文件都应对不上。还分了不同文件夹,非常难找。
能否按照之前章节,把每次课对应的代码编个号,方便学习。谢谢
print(f"Treading:{name} start") t1 = Thread(target=func1,args=('t1',)) t2 = Thread(target=func1,args=('t2',))
老师,您能帮我解释一下第一行代码的意思嘛?
第二和第三行代码的target和args是什么意思呢?这几行代码的格式是固定的吗?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637