下面这段代码在 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()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.