Python中如何在代码中主动开启线程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中如何在代码中主动开启线程?相关的知识,希望对你有一定的参考价值。

参考技术A 首先先定义线程,然后对象.start(),如果是线程池先定义线程池,给线程池分配任务他就运行了 参考技术B 在Python开启多线程,可以直接通过Tread对象来开启,也可以自定义类的形式来实现。
1.通过Thread对象来进行创建
import threading

def sing():
for i in range(50):
print("唱歌")

def dance():
for i in range(50):
print("跳舞")

t1 = threading.Thread(target=sing)
t2 = threading.Thread(target=dance)
t1.start()
t2.start()
2.同自定义类来实现,使用继承的方式,继承Thread类,重写run方法,创建一个对象后,在调用start方法

import threading

class Dance(threading.Thread):

def run(self):
for i in range(50):
print("跳舞")

class Sing(threading.Thread):

def run(self):
for i in range(50):
print("唱歌")

d = Dance()
d.start()
s = Sing()
s.start()
写在这里的代码,整个都乱了顺序了。想看源码的话,了解一下黑马程序员社区,里面不仅有技术大牛的各种解答,还有很多项目操作的源码。

关于Java线程超时退出的问题.

小弟近来有个任务是这样的,JAVA主程序中开启一个线程,我希望在一定的时间范围内 如果这个线程还没有运行完,就采取一些方法主动将他干掉,试了网上很多的方法都没有用,顶多是能抛出个异常,通知一下超时,但是线程还是在继续运行。
请教各位大虾们该怎么解决啊!!!
就没有哪个神人,能解决这个问题么. 我开的这个线程可能是要和别的程序进行交互,交互过程中可能会卡死,所以我才想能不能采取一些方法将他主动停掉,你们介绍的方法都不行...

结贴了吧.

参考技术A 你在捕捉到的异常中,调用一下线程的interrupt()方法就可以对线程进行中断,当然,你的线程中的run方法中不能catch了interrupt()异常并且忽视这个异常。

比如在出现异常的地方:
threadA.interrupt();

而threadA的run方法中:
public void run()
while(true)
try
....
catch (InterruptedException)
break; //这样是可以的,如果没有break或者修改为continue则不行




也可以将这个放在while循环之外。
public void run()
try
while(true)

....

catch (InterruptedException)
....

本回答被提问者采纳
参考技术B class AutoCloseThread implements Runnable
private int limit;//限制
private Timer timer=new Timer();

@Override
public void run()
TimerTask task=new TimerTask()
@Override
public void run()
limit++;
if(limit>50) timer.cancel();

;
timer.schedule(task, 0, 1000);
timer.schedule(task, 0);



shaoyunlu 2010-7-13 17:31:19
timer.schedule(task, 0, 1000);
timer.schedule(task, 0);
这两个 要一起写?
军 2010-7-13 17:44:31
不是
军 2010-7-13 17:44:43
timer.schedule(task, 0, 1000);
timer.schedule(“webservice”, 0);

参考资料:还有其他问题的话,给我发百度消息

参考技术C java.util.concurrent.Future
默认实现java.util.concurrent.FutureTask
你去查一下有关这个类的用法吧,他能满足你的要求。
或者java.util.concurrent.ExecutorService这个线程池也行。
参考技术D 线程中run()写法类似下面
public void run()

....
while(t<毫秒)

。。。。。
}//程序结束


在while里设置线程停止条件,我这个是判断时间。也可以设置一个标识,例如:
public void run()

boolean isEnd = false;
.....
while(isEnd == false)

if(....)

isEnd = true;
break;

......



有空看看《JAVA多线程设计》,好书,结合设计模式讲的JAVA多线程。浅显易懂

===============补充你的补充问题==============

你既然说是想主动停掉。这个意思已经很明显了,你现在的问题只是,你在代码设计思路上陷入死循环了。
所谓主动停掉就是到了指定的条件,程序自然死亡结束。你要做的就是写一个销毁方法,将线程结束的所有操作都写在里面,包括你调用或交互的其它程序结束方法。然后在指定条件下调用这个销毁操作。我不知道我说的明白不?

以上是关于Python中如何在代码中主动开启线程?的主要内容,如果未能解决你的问题,请参考以下文章

AfxBeginThread开启一个线程,怎样去关闭这个线程

请教python如何开启多线程?

Django如何监听启动,开启另外后台线程

关于Java线程超时退出的问题.

delphi中如何在dbgrid中主动添加序号?求赞助!

如何在python的多线程环境中指定一部分代码在特定线程中运行?