在python里,如果主线程结束,但子线程不想让它结束,该怎么办?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python里,如果主线程结束,但子线程不想让它结束,该怎么办?相关的知识,希望对你有一定的参考价值。
代码:
#coding=utf-8
# -*- coding:utf-8 -*-
import adihe,string,time,threading
def test():
i=0
while True:
print("%s"%(i))
i+=1
time.sleep(3)
t1=threading.Thread(target=test)
t1.setDaemon(False)#这个好像不起作用
t1.start()
t1.backgroud=True
print t1
#主线程结束,但t1子线程不想让它结束,该怎么办?
event=threading.Event()
def defacult_account():
print(a)
# time.sleep(100)
def bb():
a=1
while True:
time.sleep(1)
a+=1
if a==10:
event.set()
def get_cookies():
if len(a)< 10 and event.is_set():
print('girl')
default_ = threading.Thread(target=defacult_account, args=(10,))
default_.setDaemon(True)
default_.start()
event.clear()
print('boy')
global timer
timer = Timer(0.1, get_cookies)
timer.start()
event.set()
timer = Timer(0.1, get_cookies)
timer.start()
x=threading.Thread(target=bb)
x.start()
以上这个方法可以帮助你做到主线程退出但是子线程依然在执行。这是方法一
还有第二种方法:
import threading
def b():
while True:
print(1)
def a():
c=[]
b=thrading.Thread(target=b)
b.setDaemon(True)
b.start()
c.append(b)
for i in c:
i.join()
a()
java 子线程如何返回结果给主线程
我在主线程里的run()调用的函数里有开了一个线程,但现在我需要等子线程运行到一定程度(比如i=0,i++到100),子线程结束的同时,主线程也要结束。期间,主线程也在运行另外一个程序,不能单纯让主线程等待子线程结束。。
刚接触JAVA不久,这种情况我该怎么处理,创建线程是用 implements Runnable()这种.
当子线程到达一定条件是将其设置成false;
而主线程run()做这样的设置 while(flag)
这样主线程就会结束了~~
其实有直接关闭线程的方法 但是不建议这么做~~
防止出现死锁.追问
我原先也是这么做的 不过不知道为什么 主线程停不下来
大体结构是这样的:
public boolean flag =true;
class mainThread ....
run()while(flag)调用函数A;
A函数
while(..)
if(循环第一次的时候)new subThread;
class subThread
run()
while(...)... if(num==100) flag=false;
public class MyThreadTest
public static void main(String[] args)
MainThread mainThread=new MainThread();
mainThread.start();
class MainThread extends Thread
protected static boolean flag = true;
public void run()
super.run();
SubThread subThread=new SubThread();
subThread.start();
while (flag)
System.out.println("主线程run!");
class SubThread extends MainThread
private int i=0;
private boolean subFlag=true;
public void run()
while(subFlag)
System.out.println("子线程run! "+i);
i+=1;
if(i==100)
flag=false;
subFlag=false;
贴下我的代码吧 这个基本符合你的想法 (运行也正常)
你看看 你哪里不明白....咱们再一起解决问题
(CSDN的账号 被洗 考 密码居然明文保存...)
楼上的写法也可以...
其实观察者设计模式最好...
我的情况还挺复杂的,我的子线程需要从主线程传递参数进来,而参数是在主线程的while里生成的。我的子线程是怎么构造的:
MyThread test = new MyThread(pd, FolderNameOfPC, piece,imgUrls);
Thread search = new Thread(test);
search.start();
而且我的子线程好像得在while里构造吧, 不然传递进来的参数就是为空的。我的主线程是implements Runnable 刚接触JAVA不久,很多不懂,麻烦了
public class TS
public static void main(String[] args)
RunA classA = new RunA();
new Thread(classA).start();
class RunA implements Runnable
public void run()
RunB classb = new RunB();
new Thread(classb).start();
while (true)
if (classb.index == 100)
System.out.println("over");
break;
try
Thread.sleep(20);
catch (Exception e)
class RunB implements Runnable
public int index = 0;
public void run()
while (true)
if (index == 100)
break;
index++;
try
Thread.sleep(20);
catch (Exception e)
以上是关于在python里,如果主线程结束,但子线程不想让它结束,该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章