python 像这样定义多线程的类在调用时怎么把调用父类的参数传递给子函数
classThread(threading.Thread):def__init__(self,num,interval):threading.Thread.__init_...
class Thread(threading.Thread):
def __init__(self, num, interval):
threading.Thread.__init__(self)
self.thread_num = num
self.interval = interval
self.thread_stop = False
def run(self):
while not self.thread_stop:
f = open('E:/downloadedbooks/test/' + '这是其中一个线程创建的' + '.txt','w')
f.write('这是其中一个线程创建的')
f.close()
print ('线程创建了一个TXT文件')
time.sleep(self.interval)
self.stop()
def stop(self):
self.thread_stop = True
thread = Thread(1,1)
thread.start() 展开
def __init__(self, num, interval):
threading.Thread.__init__(self)
self.thread_num = num
self.interval = interval
self.thread_stop = False
def run(self):
while not self.thread_stop:
f = open('E:/downloadedbooks/test/' + '这是其中一个线程创建的' + '.txt','w')
f.write('这是其中一个线程创建的')
f.close()
print ('线程创建了一个TXT文件')
time.sleep(self.interval)
self.stop()
def stop(self):
self.thread_stop = True
thread = Thread(1,1)
thread.start() 展开
1个回答
展开全部
你已经实现了啊。在__init__初始化参数里,将参数传递进去。
另外因为线程工作在主程序同一个空间里,所以可以用全局变量传递。比如定义一个global v,然后在主程序里设置好。
再在线程里用global v来引用。
如果在线程运行当中,动态的改参数。可以象是这里的thread_stop设置。由主进程与从进程单对单的传递信号。
另外还可以通过队列。这个好处是有一个锁,可以全局使用。
此外你还可以引入一个消息管理器。各个线程与主进程直接通过消息传递变量。
进程之间也可以通过共享内存来实现RPC通信,就是交换数据。
线程处理完的数据,如果主程序想处理。可以这样。让线程通过全局变量,通过队列传回来。
不过主进程通常还有一个任务,就是监督线程的完成退处,并管理线程中止信号。
比如你这个程序少了一个
thread.join() 这里的join可以加一个timeout,当超时时,主进程就可以脱身出来,做一些其它的事情,比如处理返回数值。 如果线程通过一个数组变量将状态传回主进程。这样轮洵子线程状态会比join的效率更高。
你这个程序里用文件传递也不是不可以。这是一个很好思路。当你传递变量困难时,可以用文件。或者是数据库。
另外因为线程工作在主程序同一个空间里,所以可以用全局变量传递。比如定义一个global v,然后在主程序里设置好。
再在线程里用global v来引用。
如果在线程运行当中,动态的改参数。可以象是这里的thread_stop设置。由主进程与从进程单对单的传递信号。
另外还可以通过队列。这个好处是有一个锁,可以全局使用。
此外你还可以引入一个消息管理器。各个线程与主进程直接通过消息传递变量。
进程之间也可以通过共享内存来实现RPC通信,就是交换数据。
线程处理完的数据,如果主程序想处理。可以这样。让线程通过全局变量,通过队列传回来。
不过主进程通常还有一个任务,就是监督线程的完成退处,并管理线程中止信号。
比如你这个程序少了一个
thread.join() 这里的join可以加一个timeout,当超时时,主进程就可以脱身出来,做一些其它的事情,比如处理返回数值。 如果线程通过一个数组变量将状态传回主进程。这样轮洵子线程状态会比join的效率更高。
你这个程序里用文件传递也不是不可以。这是一个很好思路。当你传递变量困难时,可以用文件。或者是数据库。
追问
谢谢你。我想实现的是,吧列表切片,然后用多个线程同时处理不同切片中的内容,怎么做到在启动线程的时候把分割后的列表的序号传递给run()函数?我启动线程是直接调用那个类的,这样我给出的参数不就是传递给__init__了吗?还是__init__里面可以进行什么操作来改变它调用run()函数时候的参数?
追答
列表切片,把起始号传递过去应该是可以的。你的Thread类的__init__可以这样写
def __init__(self, num, interval, list_to_be_split, start_index):
self.list_to_be_split = list_to_be_split
self.start_index = start_index
这样不知道能不能解决你的问题。多了两个参数。调用时
thread = Thread(1,1, list_to_be_splited, start_index)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询