【问题标题】:Python How to run a function n times concurrently at Same timePython如何同时运行n次函数
【发布时间】:2018-07-12 04:45:30
【问题描述】:

我想同时运行函数 example() n 次,同时没有任何延迟,这个当前脚本能够运行 n 次,但每次调用之间几乎存在几毫秒的差异。我希望该功能同时被击中。有没有更好的方法呢? 我过去也使用过多进程,但如果我运行的次数超过 n=100,它会降低我的计算机速度。 请推荐一个好方法

import threading,argparse,sys,subprocess
from time import strftime
    def example(a):
        time= strftime("%H:%M:%S")
        print("Hello" +a)
        print(time) # It should be same for all n concurrent, since we want all to hit same time

def main(argv):
    parser = argparse.ArgumentParser(description="Hello")
    parser.add_argument("-n", type=str, dest="n")
    parser.add_argument("-a", type=str, dest="a")
    global verbose
    global simulated
    verbose = args.verbose
    n = args.n
    a = args.a

    for counter in range(1, int(n) + 1):
        try:
            t = threading.Thread(name="thread" + str(counter), target=example, args=(a))
            t.start()
        except Exception as e:
            print(e)
if __name__ == '__main__':
    try:
        ret = main(sys.argv[1:])
        sys.exit(ret)
    except Exception as ex:
        print('Error' + str(ex))
        sys.exit(1)

【问题讨论】:

  • “我使用了多进程”。唔?此代码未使用multiprocessing,而是使用threading。两者有相当大的区别。特别是,multiprocessing 不受 Global Interpreter Lock 的约束,就像 threading 那样。
  • 嗨凯文,我的意思是我在线程之前尝试了多进程。而不是 t = threading.Thread(name="thread" + str(counter), target=example, args=(a,)) 我过去尝试过多处理: p = multiprocessing.Process(target=example, args=(a ,)) [我在上面的脚本中尝试了这个而不是 t],如果我给出的 n 超过 80 左右,我的电脑就会变慢......

标签: python multithreading concurrency multiprocessing python-multithreading


【解决方案1】:

您想同时在多个线程中启动一个函数。我从来没有做过,但一个想法(未经测试)会是 - 您启动所有 100 个线程(并且选择您确定启动所有 100 个线程 0.5 秒的通常时间是多少?) - 在您的线程中,您等待一个信号:任何地方的“GO”或存储在文件中任何地方的时间/日期,这可能是“第一个线程的时间开始 + 0.5 秒”。当线程中的时间满足时,您将执行该函数。 由于我不知道线程的内在生命,我不能告诉你它是否肯定是完全相同的时间。

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 2021-07-20
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多