threading结束线程,threadstop终止线程

http://www.itjxue.com  2023-01-08 20:49  来源:未知  点击次数: 

python并发编程-线程(threading模块)

multiprocess模块 的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍, 相关知识点可以看这里

1.谁的开启速度快

3.同一进程内的线程共享该进程的数据?

主线程等待子线程结束

C# System.Threading.Timer如何停止

Threading.Timer 属于100% 多线程

Timers.Timer 默认多线程,可设置为单线程

既然是多线程,不管通过回调 还是事件 执行任务,都是开启的另一个线程;

你可以暂停或销毁计时器(Timer)本身,但是不能操作里面新开线程的任务,这也是多线程设计的期望方式,因为你不知道 超线程里面到底执行到哪儿了。

但是,像我这种(刁民)有时候就喜欢那么横,所以就把 新开的任务装在一个 new Thread()里面,这样就可以操作这个线程了,(到时只需要暴力abort() 终止这个线程就行)。

Threading.Timer 暂停: Change(-1,任意值); 启动: Change(大于等于0,时间间隔);

Timers.Timer 暂停: Stop(); 启动:Start();

再次提醒,这里暂停的意思是 计时器不在重新启动,不是终止计时器的里面任务。

c# .net 怎么终止或暂停 处于 running 状态的线程?

终止线程可以用Thread.Abort()方法,但是最好写个标志位循环去关闭,然后判断状态为关闭了在跳出循环,直接一个Thread.Abort()不一定都绝对关闭或终止线程,这一点微软都不敢保证!

Python中threading的join和setDaemon的区别及用法

python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉。而在python中,主线程结束后,会默认等待子线程结束后,主线程才退出。

python对于thread的管理中有两个函数:join和setDaemon

join:如在一个线程B中调用threada.join(),则threada结束后,线程B才会接着threada.join()往后运行。

setDaemon:主线程A启动了子线程B,调用b.setDaemaon(True),则主线程结束时,会把子线程B也杀死,与C/C++中得默认效果是一样的。

在这里给出一个例子:

#! /usr/bin/env python

import threading

import time

class myThread(threading.Thread):

def __init__(self, threadname):

threading.Thread.__init__(self, name=threadname)

self.st = 2

def run(self):

time.sleep(self.st)

print self.getName()

def setSt(self, t):

self.st = t

def fun1():

t1.start()

print "fun1 done"

def fun2():

t2.start()

print "fun2 done"

t1=myThread("t1")

t2=myThread("t2")

t2.setSt(10);

# t2.setDaemon(True)

fun1()

fun2()

print "now u will see me"

Python:进程(threading)

这里是自己写下关于 Python 跟进程相关的 threading 模块的一点笔记,跟有些跟 Linux 调用挺像的,有共通之处。

直接传入

继承 Thread 重写 run 方法

threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

group 线程组,未实现

start() 线程就绪

join([timeout]) 阻塞其他线程,直到调用这方法的进程结束或时间到达

RuntimeError: cannot join thread before it is started

get/setName(name) 获取/设置线程名。

isAlive() 返回线程是否在运行。

is/setDaemon(bool): 获取/设置是后台线程(默认前台线程(False))。(在start之前设置)

The entire Python program exits when no alive non-daemon threads are left.

没有非后台进程运行,Python 就退出。

主线程执行完毕后,后台线程不管是成功与否,主线程均停止

t.start()

t.join()

start() 后 join() 会顺序执行,失去线程意义

Lock属于全局,Rlock属于线程(R的意思是可重入,线程用Lock的话会死锁,来看例子)

acquire(blocking=True, timeout=-1) 申请锁,返回申请的结果

release() 释放锁,没返回结果

可以在构造时传入rlock lock实例,不然自己生成一个。

acquire([timeout])/release(): 与lock rlock 相同

wait([timeout]): 调用这个方法将使线程进入等待池,并释放锁。调用方法前线程必须已获得锁定,否则将抛出异常。

notify(): 调用这个方法将从等待池挑选一个线程并通知,收到通知的线程将自动调用acquire()尝试获得锁定(进入锁定池);其他线程仍然在等待池中。调用这个方法不会释放锁定。调用方法前线程必须已获得锁定,否则将抛出异常。

notifyAll(): 调用这个方法将通知等待池中所有的线程,这些线程都将进入锁定池尝试获得锁定。调用这个方法不会释放锁定。使用前线程必须已获得锁定,否则将抛出异常。

threading.Semaphore(value=1)

acquire(blocking=True, timeout=None)

资源数大于0,减一并返回,等于0时等待,blocking为False不阻塞进程

返回值是申请结果

release()

资源数加1

事件内置了一个初始为False的标志

is_set() 返回内置标志的状态

set() 设为True

clear() 设为False

wait(timeout=None) 阻塞线程并等待,为真时返回。返回值只会在等待超时时为False,其他情况为True

threading.Timer(interval, function, args=None, kwargs=None)

第一个参数是时间间隔,单位是秒,整数或者浮点数,负数不会报错直接执行不等待

可以用cancel() 取消

threading.Barrier(parties, action=None, timeout=None)

调用的进程数目达到第一个设置的参数就唤醒全部进程

wait(timeout=None)

reset() 重置,等待中的进程收到 BrokenBarrierError 错误

(责任编辑:IT教学网)

更多