多线程:两个线程与嵌套线程 Python

Multi Threading: Two Threads vs Nested Threads Python

我想尽可能加快我的程序。有人可以帮助我在速度方面会更好吗?根据我的要求,我可以采用任何方法。

方法 1(从主进程生成 2 个线程):

def a(something):
    # Does something at fixed interval
    while 1:
        print("a")
        time.sleep(60)


def b(something):
    # Keeps running for infinitely without any delay.
    while 1:
        print("b")


def main():

    something = {}

    t1 = threading.Thread(target=b, args=(something,))
    t1.start()

    t2 = threading.Thread(target=a, args=(something,))
    t2.start()

方法 2(生成嵌套线程):

def a(something):
    # Does something at fixed interval
    while 1:
        print("a")
        time.sleep(60)


def b(something):
    t2 = threading.Thread(target=a, args=(something,))
    t2.start()
    # Keeps running for infinitely without any delay.
    while 1:
        print("b")


def main():

    something = {}

    t1 = threading.Thread(target=b, args=(something,))
    t1.start()

P.S。 ab 只是虚拟函数,但以类似的方式做事。

我建议您研究多处理,而不是多重威胁,而较重的 python 线程实际上只会 运行 在一个 CPU 核心中,无论您使用多少线程.这是由于 GIL 锁,这就是为什么使用多处理来解决这个问题。

另一种方法是使用 PyPy,它是一种不同于官方的 python 实现,在某些情况下具有加速并且没有 GIL,这可以提高多线程效率

线程的共存是扁平的,不是分层的。一个线程不在另一个线程中运行。 (我很确定CPython就是这种情况,如果有人能检查一下就好了)。

换句话说,在 主线程 中生成的线程与在任何其他线程中生成的线程(您所指的 嵌套线程).

关于您的两种方法之间的其他小差异(例如全局变量与局部变量),它们几乎不会影响速度。

最后,在这个 特定情况下,多线程将按预期工作,Python 臭名昭著的 GIL 锁不会有任何影响(time.sleep() 阻塞将通过重新安排线程来避免。