首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - threading -如何创建一个播放列表函数,以便在后台使用线程运行?

Python - threading -如何创建一个播放列表函数,以便在后台使用线程运行?
EN

Stack Overflow用户
提问于 2020-09-17 02:29:31
回答 2查看 67关注 0票数 0

我目前正在尝试使播放列表函数在我的代码的后台运行。我使用线程和pygame,播放列表是一个数组列表。我一直收到这个错误:

代码语言:javascript
复制
Exception in thread Thread-4:
Traceback (most recent call last):
  File "C:\Users\harry\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in 
_bootstrap_inner

    self.run()
  File "C:\Users\harry\AppData\Local\Programs\Python\Python38\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
TypeError: 'str' object is not callable

下面是相关的代码片段:

代码语言:javascript
复制
from threading import Thread
from time import sleep

def playPlaylist(playlist):
    mixer.init()
    for music in playlist:
        mixer.music.load(music)
        mixer.music.play()
        while mixer.music.get_busy():
            sleep(1)

Thread(target=playPlaylist, args=(playlist)).start()

Github仓库:https://github.com/M1st3rMinecraft/python-virtual-assistant

EN

回答 2

Stack Overflow用户

发布于 2020-09-17 02:57:10

尝试将Thread(target=playPlaylist, args=(playlist)).start()更改为Thread(target=playPlaylist, args=(playlist, )).start()它对我的情况很有帮助。如果不是字符串,还要检查调用函数的代码中的所有元素。如果这不起作用,请将您的文件与mixer类共享,这样我就可以进一步帮助您。

票数 0
EN

Stack Overflow用户

发布于 2020-09-17 03:33:39

args参数应该是一个iterable (比如元组或列表),其中每个元素都成为函数playPlayList的参数。指定args=(playlist)时,playlist周围的圆括号不表示一个元素的元组。为此,您需要指定args=(playlist,)。因此,playlist本身被解释为可迭代的,并且它的每个元素都将被视为playPlayList的单独参数。playlist中当前必须只有一个元素,如果有,例如3个,您将得到如下错误消息:

代码语言:javascript
复制
TypeError: playPlaylist() takes 1 positional argument but 3 were given

因此需要指定:args=(playlist,)。这是第一个问题。

由于不再向您传递playlist,而是该列表中的第一个也是唯一一个元素作为参数,这可能会导致第二个错误。但我认为您会在以下位置获得例外:

代码语言:javascript
复制
for music in playlist:

但也许playlist的第一个元素本身就是可迭代的。不过,尝试修复第一个问题,看看会发生什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63925986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档