Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中向线程函数传递参数_Python_Python Multithreading - Fatal编程技术网

如何在Python中向线程函数传递参数

如何在Python中向线程函数传递参数,python,python-multithreading,Python,Python Multithreading,我有raspberry pi,我正在使用python创建一个小的蜂鸣器脚本。在脚本中,如果条件变为真,我需要打印一些信息并发出蜂鸣器声。蜂鸣器声音有两种不同的格式,即高和低。在High中,我必须运行以下代码: GPIO.output(BUZZER, 1) time.sleep(5) GPIO.output(BUZZER, 0) GPIO.cleanup() for i in range(5): print(i) state = GPIO.input(BUZZER) pr

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

GPIO.output(BUZZER, 1)
time.sleep(5)
GPIO.output(BUZZER, 0)
GPIO.cleanup()
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秒钟的声音。在
Low
中,我必须运行以下代码:

GPIO.output(BUZZER, 1)
time.sleep(5)
GPIO.output(BUZZER, 0)
GPIO.cleanup()
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)

但在这里,我不确定如何传递值
High
Low
,以生成声音函数。我不太擅长穿线。谁能给我一些想法吗。请帮忙。谢谢

请原谅;反射性习惯。特别是线程库为您提供了一个直接的解决方案,因此不需要在该行下面进行变通

见:

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

[……]

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

因此,我们可以根据需要提供
args

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

但在这里,我不知道如何传递值的高低来生成声音函数

这并不取决于对线程的理解;这是这类“回调”函数的一种通用技术(基本上,任何时候都可以将函数作为参数传递给其他函数)。例如,在使用tkinter(或其他工具包)制作GUI时,经常需要将此技术用于按钮

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

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

这里的partial有什么用?它。。。做我说的需要做的事。我已经添加了相关文档的链接。对不起,没关系。特别是对于线程,有一个特定的事情你要做,而不是这个通用锤子。请查看更新。其他一些图书馆也做类似的事情。第一步应该始终是阅读文档;即使是我们中最优秀的人也会忘记一些事情:)可以使用相同的代码从线程函数获取返回值吗?您是否查看了文档?您在尝试传递参数时遇到了什么问题?这是否回答了您的问题?