概述
下面这段代码在 windows 下运行就报错 NameError: name 'SEM' is not defined
在 windows7 windows10 测试 报错
在 Mac Linux 下测试 能正常运行
如果我在代码的最上面给 SEM 和 TIME_OUT 赋值后,就能正常运行
但是我需要用户加参数将值带进去,而不是事先定义好,所以只能放到 argparse 里面。我现在很疑惑,这个问题能解决吗?
时间过了两天了,依旧没有解决这个问题,希望小伙伴们能和我一起讨论一下怎么回事,谢谢!
# /usr/bin/env python
# _*_ coding:utf-8 _*_
import argparse, datetime, time
import threading
from multiprocessing import Pool
def test(i):
with SEM:
print(i)
time.sleep(TIME_OUT)
def test1(c):
threads = []
for i in range(int(200)):
t = threading.Thread(target=test, args=(i,))
t.start()
threads.append(t)
for t in threads:
t.join()
def main():
start_time = time.time()
print(datetime.datetime.now().strftime('Start Time: %m/%d/%Y %H:%M:%S'))
p = Pool(int(args.PROCESS))
for i in range(10):
p.apply_async(test1, args=(i,))
p.close()
p.join()
print(datetime.datetime.now().strftime('Complete time: %m/%d/%Y %H:%M:%S'))
print("Total time:%s" % (time.time() - start_time))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='test')
parser.add_argument('-m', dest='PROCESS', type=int, help='多进程数量,默认 5', default=5)
parser.add_argument('-t', dest='THREAD', type=int, help='多线程数量,默认 20', default=20)
parser.add_argument('-o', dest='OVERTIME', type=int, help='超时时间 默认 2', default=2)
args = parser.parse_args()
SEM = threading.Semaphore(int(args.THREAD))
TIME_OUT = int(args.OVERTIME)
main()
最后
以上就是健忘大米为你收集整理的python多进程消息队列_Python 关于多线程和多进程同时共用问题的全部内容,希望文章能够帮你解决python多进程消息队列_Python 关于多线程和多进程同时共用问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复