当前位置:首页 » 编程语言 » python线程异常

python线程异常

发布时间: 2022-12-19 19:42:04

‘壹’ python 线程问题

参数传递有问题。有三种传递方式,可以去网上查一下即知。这里修改一下:
#...
#use tuple to pass parameter
t1=threading.Thread(target=albaba,args=(x))
t1.start()

t2=threading.Thread(target=albaba,args=(y))
t2.start()
#...

‘贰’ python子线程崩溃会影响主线程么

会的。
当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行的最小单位,当设置多线程时,主线程会创建多个子线程,在Python中,默认情况下就是setDaemon(False),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束。
Python是一种广泛使用的解释型、高级和通用的编程语言。Python由荷兰数学和计算机科学研究学会的GuidovanRossum创造,第一版发布于1991年,它是ABC语言的后继者,也可以视之为一种使用传统中缀表达式的LISP方言。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。

‘叁’ python中主线程怎样捕获子线程的异常

最近因为别的需求,写了一个模块,似乎在这里能用得上:

https://github.com/SakuraSa/ChatProcess


其中的 example.py :

#!/usr/bin/envpython
#coding=utf-8

"""
example
"""

__author__='Rnd495'

fromtimeimportsleep
fromChatProcessimportChatroom


classEcho(Chatroom):
"""
Echo
"""
defresponse(self,data):
ifdata.startswith('sleep'):
sec=float(data[6:])
sleep(sec)
return'wakeupafter%dms'%(sec*1000)
elifdata:
returndata
else:
self.stop()
return'goodbye'


if__name__=='__main__':
,ProcessError

print'process01:'
e=Echo.create_process(lifetime=1).start()
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:0.1'),e.remain
printe.chat(''),e.remain

print''
print'process02:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:1.0'),e.remain
printe.chat(''),e.remain
exceptTimeoutError,error:
print'error:',error

print''
print'process03:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:notanum'),e.remain
printe.chat(''),e.remain
exceptProcessError,error:
print'error:',error


运行结果为:

process01:
Helloworld!0.773000001907
wakeupafter100ms0.549000024796
goodbye0.547000169754

process02:
Helloworld!0.868000030518
error:TimeoutError

process03:
Helloworld!0.868000030518
error:('Erroroccurredonloop',ValueError('couldnotconvertstringtofloat:notanum',))


在其中的 process01 中,主进程捕获了 超时

在其中的 process02 中,主进程捕获了 子进程的错误


不知道你能不能用得上

‘肆’ python多线程的问题如何处理

在python里线程出问题,可能会导致主进程崩溃。 虽然python里的线程是操作系统的真实线程。

那么怎么解决呢?通过我们用进程方式。子进程崩溃后,会完全的释放所有的内存和错误状态。所以进程更安全。 另外通过进程,python可以很好的绕过GIL,这个全局锁问题。

但是进程也是有局限的。不要建立超过CPU总核数的进程,否则效率也不高。

简单的总结一下。
当我们想实现多任务处理时,首先要想到使用multiprocessing, 但是如果觉着进程太笨重,那么就要考虑使用线程。 如果多任务处理中需要处理的太多了,可以考虑多进程,每个进程再采用多线程。如果还处理不要,就要使用轮询模式,比如使用poll event, twisted等方式。如果是GUI方式,则要通过事件机制,或者是消息机制处理,GUI使用单线程。

所以在python里线程不要盲目用, 也不要滥用。 但是线程不安全是事实。如果仅仅是做几个后台任务,则可以考虑使用守护线程做。如果需要做一些危险操作,可能会崩溃的,就用子进程去做。 如果需要高度稳定性,同时并发数又不高的服务。则强烈建议用多进程的multiprocessing模块实现。

linux或者是unix里,进程的使用代价没有windows高。还是可以接受的。

‘伍’ python多线程运行过程中出现奇怪的等待行为

你这个程序问题在new = Thread( self.subfunc(i) ) 传进去的时候就已经调用了self.subfunc
改成 new = Thread( target=self.subfunc, args=(i,) )

另外i 数字太小也看不出来,因为工作量太小,在线程的一个时间片内函数就执行完了,看不到切换的过程,设成if i>10000就明显了

‘陆’ python多线程老是报错。大神帮忙看看哈

你好,你具体的代码我没看,但单从报错来看,你的变量名写错了:
你定义的是
condition = threading.Condition()
但你第10行引用的是
conditon
少了一个字母i

‘柒’ Python ThreadPoolExecutor 异常中止解决方案

通常情况,我们利用 Ctrl+C 让程序触发 KeyboardInterrupt 异常,中止程序运行。线程池方案下, Ctrl-C 失效,当线程池里的线程任务跑完后,才会触发 KeyboardInterrupt

上下文管理协议相当于隐性地省略了 threadPool.shutdown(wait=True) ,同时,程序正常执行完成或出现异常中断的时候,就会调用 __exit__() 方法,接下来进行异常中止的基础。

适用于 Django 等 WEB 应用框架,本身自带多线程,修改全局变量简单,但要注意线程安全。

程序运行中,只需 sign = 1 或者 exiting.set() ,worker 函数则跳过主要运算部分,剩余线程任务将迅速完成,变相达到中止多线程任务的目的。

提交给线程池的每个线程任务 task 加入 threadPool 中,方便后续对 task 进行操作。当 for 循环内的 task 全部提交后,线程会再后台运行,而进程运行至 while 中堵塞,直至 threadPool 中最后一个线程是否 .done() 。若进程堵塞在 while 中接收到 Ctrl+C KeyboardInterrupt 异常,则从后往前取消 threadPool 中所有任务,达到中止目的。

‘捌’ python捕获所有异常怎么写 python中捕获线程抛出的异常

except (IDontLIkeYouException, YouAreBeingMeanException) as e:pass用逗号分割的方法只能在Python2.6和2.7里好使,在Python3中则无效;

‘玖’ python中的多线程为什么会报错

题主你好,
你的问题在于threading模式的Thread()类使用的不正确,你代码中的代码为:
t1 = threading.Thread(target=name_b, name="job2")
其中name_b是你定义的函数名, 其实光看语句本身是没错的,但问题出在:
" name_b这个函数定义中有两个参数,你没有在Thread()类中给name_b传参 "
你想一下,如果不考虑多线程,你去调用name_b这个函数,光写个:
name_b() 肯定是不对的
你要将os_name2和url_b这两个参数也带上才行,即:
name_b(xxx, yyy)

所以就你当前代码报错信息要改的话, 只需要在两个threading.Thread()中再加一个args参数,将传给函数的参数代码写在" () "中, 即:
threading.Thread(target=name_b, name="job2", args=(xxx, yyy))
另一个threading.Thread()你照着上面的写即可.
希望可以帮到题主, 欢迎追问

热点内容
如何识别电脑的网络配置 发布:2025-05-14 22:38:46 浏览:847
pipforpython3 发布:2025-05-14 22:38:34 浏览:350
如何把迷你世界的服务器搞崩 发布:2025-05-14 22:37:15 浏览:94
如何让安卓卡死机 发布:2025-05-14 22:36:27 浏览:633
wemall微商城源码 发布:2025-05-14 22:15:20 浏览:804
隆地优选交易密码是什么 发布:2025-05-14 21:53:23 浏览:96
强酸强碱存储柜 发布:2025-05-14 21:45:16 浏览:565
车辆参数配置包括什么 发布:2025-05-14 21:31:03 浏览:164
怎么引入安卓项目 发布:2025-05-14 21:26:39 浏览:825
游戏辅编程 发布:2025-05-14 21:18:49 浏览:688