首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带pafy的多线程

带pafy的多线程
EN

Stack Overflow用户
提问于 2021-08-10 06:30:17
回答 1查看 95关注 0票数 0

我试图使用多个pafy实例上的多线程来获取许多视频流。我的代码的简化版本:

代码语言:javascript
复制
import pafy
import threading

def get_playurl(url):
    video = pafy.new(url)
    best = video.getbest()
    playurl = best.url
    return playurl

threads = []

for i in range(5):
    t = threading.Thread(target=get_playurl, args=("https://www.youtube.com/watch?v=erG5rgNYSdk&ab_channel=WeezerVEVO",))
    t.start()
    threads.append(t)

for thread in threads:
    thread.join()

一些线程将成功地获得播放get,而另一些线程将引发ImportError:

代码语言:javascript
复制
Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Users\my_name\AppData\Local\Programs\Python\Python39\Lib\threading.py", line 954, in _bootstrap_inner
    self.run()
  File "C:\Users\my_name\AppData\Local\Programs\Python\Python39\Lib\threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\my_name\VSCodeProjects\my_project\stackoverflow_example.py", line 6, in get_playurl
    video = pafy.new(url)
  File "C:\Users\my_name\VSCodeProjects\my_project\.venv\lib\site-packages\pafy\pafy.py", line 122, in new
    from .backend_youtube_dl import YtdlPafy as Pafy
ImportError: cannot import name 'YtdlPafy' from partially initialized module 'pafy.backend_youtube_dl' (most likely due to a circular import) (C:\Users\my_name\VSCodeProjects\my_project\.venv\lib\site-packages\pafy\backend_youtube_dl.py)

哪些成功了,哪些引发了例外,似乎是随机的,每次都不同。我对线程很陌生,所以不知道这里有什么问题。我没有任何与这些模块同名的文件,我还安装了youtube-dl依赖+更新了所有其他没有任何效果的文件。

(感谢任何帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-10 06:35:46

Pafy显然使用延迟导入,当您使用线程时,您会遇到两个线程同时试图导入子模块的争用状态。

有几个我能想到的选择:

  • import pafy之后将import pafy.backend_youtube_dl添加到主脚本中,即使您不使用该导入,以确保它已经加载。
  • multiprocessing用于多个进程而不是线程。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68721975

复制
相关文章

相似问题

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