我需要在另一个线程中运行一个函数,并获取该函数的返回值以将其保存到主线程中的一个变量中。基本上,我的代码调用该函数,该函数通过串行端口与天平通信,等待并获取响应,解析响应,并以浮点形式返回响应。我需要捕捉这个浮动,这样我就可以保存它了。这是我的代码:from multiprocessing.pool import ThreadPool

pool = ThreadPool(processes=2)

result = pool.apply_async(manual_short_command, (self.status_signal2, self.conn, command, status_string, 2))

self.readout = result.get()

def manual_short_command(signal, conn, command, status_string, string_arg='', timeout=60):

""" Send specified command (expects a balance response)to balance through "conn" and emit status signal """

print "Command: " + command.strip('\r\n')

emit_status(signal, status_string[0], string_arg)

if not conn.isOpen():

conn.open()

# Wait until nothing can be read at the balance port

while not timeout and conn.readlines():

time.sleep(1)

timeout -= 1

# Write the command to the balance port and wait for response

while timeout:

time.sleep(1)

conn.write(command)

resp = conn.readlines()

try:

resp = float(resp[0])

except ValueError:

pattern = r'(.?\d+\.\d+)'

match = re.findall(pattern, resp[0])

resp = float(match[0])

except IndexError:

continue

print resp

print 'timeout: %s' % timeout

if resp:

emit_status(signal, status_string[1], str(resp))

print resp, 'here'

return resp

timeout -= 1

conn.close()

print resp

return resp

我在另一个线程中启动函数manual_short_command,这个函数通过串行端口发送一个命令并等待响应。然后它返回这个响应并将其写入状态浏览器(我使用PyQt4作为GUI,但我认为这是不相关的)。在

当我试图分配self.readout = result.get()时,我得到一个错误,说IndexError: list index out of range,这意味着该函数还没有在另一个线程中完成。在分配结果之前如何等待线程完成?否则我的程序挂起。我查看了Threading pool similar to the multiprocessing Pool?以获得一些指导,但是我找不到如何同步这两个线程。有什么建议吗?对不起,代码块太大了。在

python等待线程结束_如何等待线程完成后再继续相关推荐

  1. c++ 等待子线程结束_?进程、线程、以及它们之间的区别与联系

    一.进程简介 1.1 进程概念的引入 计算机中,CPU是最宝贵的资源,为了提高CPU的利用率,引入了多道程序设计的概念.当内存中多个程序存在时,如果不对人们熟悉的"程序"的概念加以 ...

  2. c++ 等待子线程结束_进程和线程

    1.进程的基本概念 进程简单说就是运行中的可执行文件.代码经过编译后生成二进制可执行文件,当运行该可执行文件时,代码被装载到内存中,然后CPU会执行程序中的指令. 有关进程调度,例如进程A,进程B,C ...

  3. java 等待线程池结束_如何等待java线程池中所有任务完成

    一.等待线程池所有线程完成: 有时候我们需要等待java thread pool中所有任务完成后再做某些操作,如想要等待所有任务完成,仅需调用threadPool.awaitTermination() ...

  4. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  5. python判断线程结束_判断Threading.start新线程是否执行完毕的实例

    新写自己的Threading类 class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断 def __init__( ...

  6. python的多线程应用前景_什么是线程(多线程),Python多线程的好处

    几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每一个运行中的程序就是一个进程.当一个程序运行时,内部可能包含多个顺序执行流,每一个顺序执行流就是一个线程. 线程和进程 几乎所有的 ...

  7. python协程等待执行完成_异步等待的 Python 协程

    现在 Python 已经支持用协程进行异步处理.但最近有建议称添加协程以全面完善 Python 的语言结构,而不是像现在这样把他们作为生成器的一个类型.此外,两个新的关键字---异步(async)和等 ...

  8. java timer 线程安全_多线程之 线程安全与控制

    线程控制 wait和notify方法需要注意的细节:wait方法与notify方法必须要由同一个锁对象调用.因为:对应的锁对象可以通过notify唤醒使用同一个锁对 象调用的wait方法后的线程. w ...

  9. JAVA线程池_并发队列工作笔记0003---线程池的分类_可缓存线程池_定长线程池_定时线程池_单例线程池

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里说线程池的分类 有可缓存类型, 定长类型, 定时类型, 单例类型, 这里我这次用Executo ...

最新文章

  1. maven插件的使用
  2. systemd系统服务管理详解
  3. VS中stack around the variable ‘****‘ was corrupted堆栈被破坏
  4. mybatis传递多个参数_Mybatis传递多个参数的4种方式(干货)
  5. 1262. 可被三整除的最大和(贪心||动态规划)
  6. .NET Core 取消令牌:CancellationToken
  7. 内存管理(ybtoj-二叉堆)
  8. Leetcode--42.接雨水
  9. 11988 - Broken Keyboard (a.k.a. Beiju Text)
  10. 华为中国生态大会2021举行在即,GaussDB将重磅发布5大解决方案
  11. 【LeetCode】【refine 1】题号:1. 两数之和
  12. 异常处理-try catch
  13. Web渗透测试实战——(1)Web渗透测试简介
  14. VUE后台管理中使用富文本编辑器导入word 文档进行编辑
  15. UEFI——PCI/PCIe
  16. python提取文字的轮廓_opencv 轮廓提取文字
  17. 新手学习python零基础_一个零基础新手学习Python应该知道的学习步骤与规划
  18. 从头开始搞懂 MySQL(07)为什么同一条 SQL 时快时慢
  19. 10大耗油,10大省油。
  20. android x86酷狗音乐,酷狗音乐怀旧版

热门文章

  1. Javassist使用指南1
  2. 搭建一个普通的网站需要花费多少?
  3. Windows 11 相機獲得新更新
  4. html如实现留言板功能,JS实现留言板功能
  5. 帝国CMS调用图集第一张图片的方法
  6. 监察对象是否应该包含机关本身
  7. 对摩尔定律的理解。摩尔定律当前还是继续有效吗?
  8. DM8达梦数据库数据文件整体迁移方式
  9. ftp-serv文件服务软件下载
  10. 题解报告(CDUT暑期集训——第二场)