在另一个线程-youtube-dl-示例中运行时访问函数的局部变量

时间:2014-06-18 04:42:54

标签: python multithreading function

我想:

  

1 /获取youtube频道或播放列表

     

2 /获取视频的网址。

     

3 /处理它们:查看它们给用户,或者由anotrher下载管理器开始下载。

从youtube-dl获取信息的函数:

感谢jaimeMF answer

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

问题:

如果urlyoutube:channelyoutube: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

1 个答案:

答案 0 :(得分:0)

您的问题有点模糊,需要上下文代码才能回答。但我认为课程应该是解决方案 您需要创建一个类并在其中列出您的函数定义。然后,您应该添加前缀' self。'到您想要全局访问的任何本地变量。

关于如何创建一个类: https://docs.python.org/2/tutorial/classes.html