Python类作为线程,不显示输入

时间:2019-11-11 11:52:05

标签: python

我正在运行Python 3,并试图为threads创建自己的课程:

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()

2 个答案:

答案 0 :(得分:0)

您必须从继承自 threading.Thread 的类中创建实例,并使用start方法才能在 def run()块中启动该块:

import threading

class myThread(threading.Thread):
  def __init__(self, i):
    threading.Thread.__init__(self)
    self.i = i
  def run(self):
    while True:
      print(self.i)



for num in range(5): # number of threads to create
    _definition = myThread(i = 'myoutput')
    _definition.start()

答案 1 :(得分:0)

问题在于,这只会在进程中创建线程。它不会启动该线程。

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()