你有网站 我做房东 只收佣金的网站,怎么做团购网站,东莞定制网站建设,环保h5微网站今天在自学生产者消费者模型时#xff0c;发现了一个有趣的方法
if__name__ __main__:
for i in range(2):
p Producer()
p.start()
for i in range(10):
c Consumer()
c.start()
于是就去确认了一下度娘#xff0c;果然好多初学者都会问这个问题#xff0c;…今天在自学生产者消费者模型时发现了一个有趣的方法
if__name__ __main__:
for i in range(2):
p Producer()
p.start()
for i in range(10):
c Consumer()
c.start()
于是就去确认了一下度娘果然好多初学者都会问这个问题思路解释如下
1. 如果模块是被导入__name__的值为模块名字
2. 如果模块是被直接执行__name__的值为’__main__’
亦或有一些解释
1__name__是一个变量。前后加了爽下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。
2Python有很多模块而这些模块是可以独立运行的这点不像C和C的头文件。
3import的时候是要执行所import的模块的。
4__name__就是标识模块的名字的一个系统变量。这里分两种情况假如当前模块是主模块也就是调用其他模块的模块那么此模块名字就是__main__通过if判断这样就可以执行“__mian__:”后面的主函数内容假如此模块是被import的则此模块名字为文件名字不加后面的.py通过if判断这样就会跳过“__mian__:”后面的内容。
通过上面方式python就可以分清楚哪些是主函数进入主函数执行并且可以调用其他模块的各个函数等等。
上一段生产者消费者模型代码来判断代码确认可以简化代码健壮性
#encodingutf-8
import threading
import time
condition threading.Condition()
products 0
class Producer(threading.Thread):
生产者
ix [0] # 生产者实例个数
# 闭包必须是数组不能直接 ix 0
def __init__(self, ix0):
threading.Thread.__init__(self)
self.ix[0] 1
self.setName(生产者 str(self.ix[0]))
def run(self):
global condition, products
while True:
if condition.acquire():
if products 10:
products 1;
print({}库存不足,我努力生产了1件产品现在产品总数量 {}.
format(self.getName(), products))
condition.notify()
else:
print({}库存充足,让我休息会儿现在产品总数量 {}.
format(self.getName(), products))
condition.wait();
condition.release()
time.sleep(2)
class Consumer(threading.Thread):
消费者
ix [0] # 消费者实例个数
# 闭包必须是数组不能直接 ix 0
def __init__(self):
threading.Thread.__init__(self)
self.ix[0] 1
self.setName(消费者 str(self.ix[0]))
def run(self):
global condition, products
while True:
if condition.acquire():
if products 1:
products - 1
print({}我消费了1件产品现在产品数量 {}.
format(self.getName(), products))
condition.notify()
else:
print({}只剩下1件产品我停止消费。现在产品数量 {}.
format(self.getName(), products))
condition.wait();
condition.release()
time.sleep(2)
if __name__ __main__:
for i in range(2):
p Producer()
p.start()
for i in range(10):
c Consumer()
c.start()
特此记录学而时习之