使用分布式+you-get多任务下载视频

主机端分发页面
由于视频数据比较大所以采取下载到从机上后期想读取在使用分布式读取即可

#主机控制代码
import multiprocessing
import multiprocessing.managers
import random,time,os
from multiprocessing import Queue
# 任务队列
task_queue=Queue()
# 结果队列
result_queue=Queue()

# 提供给从机调用后得到队列中的数据
# 就是接口
def return_task():
	return task_queue
def return_result():
	return result_queue
class QueueManager(multiprocessing.managers.BaseManager):
	pass
if __name__=="__main__":
	# 开启分布式支持
	multiprocessing.freeze_support()
	# 注册可以访问队列并得到结果的函数
	QueueManager.register('get_task',callable=return_task)
	QueueManager.register('get_result',callable=return_result)
	manager=QueueManager(address=('192.168.72.139',8888),authkey='password'.encode('utf-8'))
	manager.start()
	task=manager.get_task()
	result=manager.get_result()
	for i in range(1,356):
		print('task add data')
		#将任务放入队列
		task.put(i)
		print('watting for ____')
	for i in range(1,356):
	       #将结果从队列中取出
		res=result.get()
		print('get_data',res)
	manager.shutdown()

从机代码

import multiprocessing
import multiprocessing.managers
import random,time,os
from multiprocessing import Queue

class QueueManager(multiprocessing.managers.BaseManager):
	pass
if __name__=="__main__":
	# 开启分布式支持
	multiprocessing.freeze_support()
	# 注册可以访问队列并得到结果的函数
	QueueManager.register('get_task')
	QueueManager.register('get_result')
	manager=QueueManager(address=('192.168.72.139',8888),authkey='password'.encode('utf-8'))
	manager.connect()
	task=manager.get_task()
	result=manager.get_result()
	for i in range(1,356):
		try:
		#从队列中取出任务
			data=task.get()
			os.system('you-get -o ./ https://www.bilibili.com/video/av31369828/?p='+str(238+data))
			result.put('client'+str(data))
		except:
			pass


你可能感兴趣的:(python)