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