下面这段代码在 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() 