1 /获取youtube频道或播放列表
2 /获取视频的网址。
3 /处理它们:查看它们给用户,或者由anotrher下载管理器开始下载。
import time
import youtube_dl
def myfunc(url):
ydl = youtube_dl.YoutubeDL()
# Add all the available extractors
ydl.add_default_info_extractors()
result = ydl.extract_info( url , download=False)
## ydl.extract_info() collect `url fetched info` in local variable called "ie_result"; It return this "ie_result" when finshed.
if 'entries' in result: # Can be a playlist or a list of videos
video = result['entries'][0]
else:
# Just a video
video = result # get desired data
res.append(desired data)
return res
如果url
是youtube:channel
或youtube:playlist
; youtube-dl将逐个获取网址;消耗很长时间来返回信息; you can imagine the time of fetching cannel contaiing 500 videos information
。
所以我想同时获得res
列表;开始向用户查看它们或开始通过另一个下载程序下载它们。等
我认为在以下设计中:
def get_res():
args = ['http://www.youtube.com/channel/url']
thread1 = threading.Thread(target=myfun , args )
thread1.run()
# access myfun.res.ie_result by anyway #.... this is the problem
# return its value
def worker():
processed_res = []
while True:
res = get_res()
for item in res :
if item not in processed_res:
# do something like;
# start viewing it to the user,
# or start downloading them by another downloader.
processed_res.append(item)
time.sleep(1)
# break when tread1 terminate
get_res()
worker()
实际问题仍然存在于函数get_res
中的 *访问myfun.res.ie_result * ;
是否可以从其他线程访问运行函数的局部变量? 任何帮助表示赞赏:D 任何以另一种方式解决问题的试验也是。
*要记住的项目:*
我编辑了代码以澄清它。
myfun
调用extract_info()
函数。在result
局部变量中。的变量
extract_info()
函数收集结果名为ie_result
extract_info
逐个获取url数据,返回列表中的all。 收集它。
myfun.res.ie_result
等于ydl.extract_info(url).ie_result
答案 0 :(得分:0)
您的问题有点模糊,需要上下文代码才能回答。但我认为课程应该是解决方案 您需要创建一个类并在其中列出您的函数定义。然后,您应该添加前缀' self。'到您想要全局访问的任何本地变量。