我正在尝试为

Python 3.4中的项目制作线程飞行软件,其中我需要线程重新启动,以防在传感器读取期间发生I / O错误或其他类似的侥幸崩溃.因此,我正在制作一个看门狗来检查线程是否已经死亡并重新启动它们.

起初我试图检查线程是否不再存在并重新启动它,这样做:

>>> if not a_thread.isAlive():

... a_thread.start()

Traceback (most recent call last):

File "", line 2, in

File "c:\Python34\lib\threading.py", line 847, in start

raise RuntimeError("threads can only be started once")

RuntimeError: threads can only be started once

从线程和Python本身的角度来看,这种行为是有道理的,但这使我的工作更难.所以我使用字典实现了一个解决方案来存储初始线程并将其复制到一个新对象并在必要时启动它.不幸的是,这也不起作用.

这是一个基本的例子:

import threading

import logging

import queue

import time

from copy import copy, deepcopy

def a():

print("I'm thread a")

def b():

print("I'm thread b")

# Create thread objects

thread_dict = {

'a': threading.Thread(target=a, name='a'),

'b': threading.Thread(target=b, name='b')

}

threads = [copy(t) for t in thread_dict.values()]

for t in threads:

t.start()

for i in range(len(threads)):

if not threads[i].isAlive():

temp = thread_dict[threads[i].name]

threads[i] = deepcopy(temp)

threads[i].start()

thread(i).join(5)

返回:

I'm thread a

I'm thread b

Traceback (most recent call last):

File "main_test.py", line 25, in

threads[i] = deepcopy(temp)

File "c:\Python34\lib\copy.py", line 182, in deepcopy

y = _reconstruct(x, rv, 1, memo)

... (there's about 20 lines of traceback within copy)

File "c:\Python34\lib\copyreg.py", line 88, in __newobj__

return cls.__new__(cls, *args)

TypeError: object.__new__(_thread.lock) is not safe, use _thread.lock.__new__()

因此,显然线程对象复制是不安全的……无论如何重新启动线程而不是重新创建整个对象?

python 线程重启_在Python中重新启动一个线程相关推荐

  1. docker部署python web应用_在 Docker 中运行一个 Python 的 Web 应用

    几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器.在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beansta ...

  2. python 生成可执行文件_在Cython中创建一个可执行文件

    你想要的是Cython编译器的–embed标志. 关于它没有大量的文档,但this是我能找到的.它确实链接到一个简单的工作示例. 要将Cython源代码编译为可以编译为可执行文件的C文件,可以使用cy ...

  3. python selenium 下拉列表_从下拉列表中选择python selenium选项

    我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...

  4. 任意长度的python列表最后一个元素索引_任意长度的 Python 列表、元组和字符串中最后一个元素的下标为 ________ 。_学小易找答案...

    [填空题]已知 x = [3, 5, 7] ,那么表达式 x[10:] 的值为 ____________ . [填空题]表达式 [x for x in [1,2,3,4,5] if x<3] 的 ...

  5. 任意长度的python列表最后一个元素索引_任意长度的Python列表、元组和字符串中最后一个元素的下标为...

    [填空题]Python内置函数__用来返回序列中的最小元素 [填空题]表达式 list(range(5)) 的值为 [填空题]表达式 int(4**0.5) 的值为 [填空题]表达式 3 or 5 的 ...

  6. 任意长度的python列表_任意长度的Python列表、元组和字符串中最后一个元素的索引为...

    任意长度的Python列表.元组和字符串中最后一个元素的索引为 答:-1 什么是软件工程? 答:百度定义:软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及程序设计语言 ...

  7. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  8. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  9. python 打印类型_让Python输出更漂亮:PrettyPrinter

    PrettyPrinter是Python 3.6 及以上版本中的一个功能强大.支持语法高亮.描述性的美化打印包.它使用了改进的Wadler-Leijen布局算法,和Haskell打印美化库中的pret ...

最新文章

  1. C++复制控制:拷贝构造函数
  2. Linux解压WINRAR文件
  3. 教你搞定Android自定义View
  4. SpringMVC学习总结(2)——SpringMVC返回json配置
  5. ktt算法 约化_推荐系统的多目标优化(4)-PE-LTR
  6. javascript中setTimeout()函数
  7. 从0到1,从概念到国际标准,蚂蚁共享智能凭什么?
  8. C++使用openssl实现aes加解密,其中加密是string到文件,解密是文件到string,切合项目背景
  9. mysql中json_extract函数的使用?作用是什么?
  10. 神州数码代表亚太及日本区荣膺Riverbed 2017年度最佳分销商
  11. ha 配置ssl_haproxy ssl 配置方式-阿里云开发者社区
  12. 【OpenJudge7826】分苹果(小学奥数)
  13. OpenCV——PS 图层混合算法(一)
  14. java版chsi.com.cn模拟登陆
  15. 利用ArcMap渲染DEM的两种方式
  16. 页面访问量统计java_java实现页面访问量统计的实例
  17. 基于SVM的猫咪图片识别器
  18. 快速切题 usaco ariprog
  19. Go程序当父进程被kill,子进程也自动退出的问题记录
  20. IT管理类培训,你想了解的全都在这里

热门文章

  1. windows下VSCode调试时找不到文件的一种原因
  2. skpaint matchcharacter 不能显示英文_外贸提单信息确认,细节不能忽略!
  3. 软考-高项-论文-信息系统项目的风险管理
  4. Python+Tushare 实现股票自动盯盘
  5. android巡检路径规划,输电线路巡检的路径规划与建模
  6. Stages—产品开发流程管理解决方案
  7. 斯坦福CS229机器学习笔记-Lecture5 - 生成学习算法+高斯判别GDA+朴素贝叶斯+拉普拉斯平滑
  8. 【简单了解APP应用系统架构】
  9. 闲鱼卖书上架难,那是你不知道这个bug……
  10. js 处理-按中文/拼音/简拼检索