在 class Python 的方法中线程化两个函数

Threading two functions inside a method of a class Python

我想在 Python 中同时 运行 一个 class 方法中的 2 个函数。我尝试使用 threading 模块,但它不起作用。我的示例代码如下:

import os, sys
import threading
from threading import Thread

class Example():
    def __init__(self):
        self.method_1()

    def method_1(self):

        def run(self):
            threading.Thread(target = function_a(self)).start()
            threading.Thread(target = function_b(self)).start()

        def function_a(self):
            for i in range(10):
                print (1)

        def function_b(self):
            for i in range(10):
                print (2)

        run(self)


Example()

如果执行上述代码,它只会先打印所有 1,然后再打印所有 2。但是,我想要的是同时打印 12 。因此,所需的输出应该是它们的混合。

threading 模块是否能够做到这一点?如果没有,哪个模块可以做到这一点?如果有人知道如何解决它,请告诉我。赞赏!!

您需要以不同方式传递参数。现在你实际上是在 threading.Thread 初始化调用中执行你的函数,而不是创建一个执行函数的线程。

如果需要函数作为参数,请始终只使用 function。如果你写 function(),Python 将不会将实际函数作为参数传递,而是当场执行函数并使用 return 值代替。

def run(self):
    threading.Thread(target = function_a, args=(self,)).start()
    threading.Thread(target = function_b, args=(self,)).start()

这里是:

import os, sys
import threading
from threading import Thread
import time

class Example():
    def __init__(self):
        self.method_1()

    def method_1(self):

        def run(self):
            threading.Thread(target = function_a, args = (self,)).start()
            threading.Thread(target = function_b, args = (self,)).start()

        def function_a(self):
            for i in range(10):
                print (1)
                time.sleep(0.01) # Add some delay here

        def function_b(self):
            for i in range(10):
                print (2)
                time.sleep(0.01) # and here


        run(self)


Example()

你会得到这样的输出:

1
2
1
2
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1