Python类作为线程,不使用';t打印输入
我正在运行Python类作为线程,不使用';t打印输入,python,Python,我正在运行python3,并试图为线程创建自己的类: class myThread(multiprocessing.Process): def __init__(self, i): multiprocessing.Process.__init__(self) self.i = i def run(self): while True: print(self.i) 创建线程时,它不会输出i: multiprocessing.Process(target=
python3
,并试图为线程创建自己的类
:
class myThread(multiprocessing.Process):
def __init__(self, i):
multiprocessing.Process.__init__(self)
self.i = i
def run(self):
while True:
print(self.i)
创建线程时,它不会输出i
:
multiprocessing.Process(target=myThread, args=[5]).start()
您必须从继承自threading.Thread的类创建实例,并使用start方法在def run()块中启动块:
导入线程
类myThread(threading.Thread):
定义初始化(self,i):
threading.Thread.\uuuuu init\uuuuuu(自)
self.i=i
def运行(自):
尽管如此:
打印(self.i)
对于范围(5)中的num:#要创建的线程数
_定义=myThread(i='myoutput')
_definition.start()
问题在于,这只会在进程中创建一个线程。它不会启动那个线程
multiprocessing.Process(target=myThread, args=[5])
您可以执行以下操作,但以这种方式将线程和进程组合在一起有点多余,因为可以使用进程的主线程
import threading
import multiprocessing
class myThread(threading.Thread):
def __init__(self, i):
threading.Thread.__init__(self)
self.i = i
def run(self):
while True:
print(self.i)
def wrapper(i):
t = myThread(i)
t.start()
t.join()
if __name__=="__main__":
p = multiprocessing.Process(target=wrapper, args=[5])
p.start()
p.join()
以下操作与此相同,但没有线程:
import multiprocessing
def my_target(i):
while True:
print(self.i)
if __name__=="__main__":
p = multiprocessing.Process(target=my_target, args=[5])
p.start()
p.join()
您正在尝试运行线程还是进程<代码>多处理用于在单独的进程中运行代码,而
线程
用于在同一进程中运行代码。从技术上讲,您可以使用threading.Thread子类并将其作为进程运行(multiprocessing.process(target=myThread(5.run).start()
),但我不认为这样做有什么意义。我将其作为进程运行,以便可以终止它。您可以将其作为线程运行,并在自行运行时执行;然后,您可以从外部更改该标志以终止线程。将类型更改为multiprocessing.Process.Need立即使用myThread(5)调用类。如果不使用类,而使用简单的def
,则start()
似乎有效,它通过直接调用.start()
,如我的示例所示。通过创建实例,然后调用start
似乎不会有太大的变化,这可能是因为您没有在多进程行中传递i参数?在Python3.7.4中创建一个实例对我来说是可行的,但是我希望我的进程中有其他函数,这样我就可以在进程运行时更新self.I
。