怎么在Python中将参数传递给线程函数

本教程将介绍如何在Python中将参数传递给线程函数的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么在Python中将参数传递给线程函数 教程 第1张

问题描述

我在raspberry pi中使用了python来创建一个小的蜂鸣器脚本。在脚本中,如果条件变为True,我需要打印一些信息并发出蜂鸣器的声音。蜂鸣器的声音有两种不同的格式,即HighLow。在High中,我必须运行以下代码:

GPIO.output(BUZZER, 1)
time.sleep(5)
GPIO.output(BUZZER, 0)
GPIO.cleanup()

使蜂鸣器连续发出5秒声音。在Low中,我必须运行以下代码:

for i in range(5):
 print(i)
 state = GPIO.input(BUZZER)
 print("state is {}".format(state))
 GPIO.output(BUZZER, 1)
 time.sleep(0.3)

 state = GPIO.input(BUZZER)
 print("state is {}".format(state))
 GPIO.output(BUZZER, 0)
 time.sleep(0.3)

它将发出5声嘟嘟声。

以下是python脚本:

def generate_sound(tempo):
 if tempo == "High":
  GPIO.output(BUZZER, 1)
  time.sleep(5)
  GPIO.output(BUZZER, 0)
  GPIO.cleanup()
 else:
  for i in range(5):
state = GPIO.input(BUZZER)
print("state is {}".format(state))
GPIO.output(BUZZER, 1)
time.sleep(0.3)

state = GPIO.input(BUZZER)
print("state is {}".format(state))
GPIO.output(BUZZER, 0)
time.sleep(0.3)



if some_condition is True:
 generate_sound("High")
 print("This condition is True")
 print("Here is the information you need")
 print("Some more information")

else:
 generate_sound("Low")
 print("This condition is False")
 print("Here is the information you need")
 print("Some more information")

上面的代码运行良好,但问题是我必须同时显示信息和发出声音。但在目前的方法中,声音会产生并等待5秒,然后打印信息。

为了解决这个问题,我想将生成声音的函数放在一个线程中,这样它就可以与打印信息并行运行,如下所示:

sound = Thread(target=generate_sound)

但这里我不确定怎么传递HighLow值来生成声音函数。我对穿线不是很在行。有什么人能给我一些建议。请帮帮忙。谢谢

推荐答案

对不起;那里有条件反射的习惯。线程库特别为您提供了直接的解决方案,因此不需要线下的变通方法。

参见Thread documentation:

threading.Thread

[...]

是目标调用的参数元组。默认为()

因此我们只能根据需要提供args

# Note the comma in `('High',)`; we want a 1-element tuple.
sound = Thread(target=generate_sound, args=('High',))

但在这里我不确定怎么传递High和Low值以生成声音函数。

这并不依赖于对线程的理解;它是此类&回调&函数(基本上是将函数作为参数传递给其他函数的任何时候)的通用技术。例如,在使用tkinter(或其他工具包)制作图形用户界面时,您经常需要对按钮使用此技术。

将参数绑定到调用,例如使用标准库中的functools.partial

from functools import partial
sound = Thread(target=partial(generate_sound, 'High'))

好了关于怎么在Python中将参数传递给线程函数的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。