- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码
class MusicHandler(object):
""" Implements the logic to download musics """
def __init__(self):
""" Creates the class object, loads configs, absolute paths and create directories. Does not init download """
# create logger
self.logger = getLogger("music logger")
self.logger.info("Initializing MusicHandler class object")
# load config vars
self.configs = utils.get_configs()
# load absolute paths
self.dir_music = self.configs["music_path"]
self.dir_audio = utils.get_path_from_rel(self.configs["audio_path"], base_path=self.dir_music)
self.dir_video = utils.get_path_from_rel(self.configs["video_path"], base_path=self.dir_music)
self.taboo_path = utils.get_path_from_rel(self.configs["taboo_path"])
# make dir if not exists
list(map(utils.make_dir_safe, (self.dir_music, self.dir_audio, self.dir_video)))
@run_safe
def download_one(self, link, keep_video=False):
""" handles the download of one link. keep_video determines if video is saved or deleted. """
self.logger.info(f"Starting download of {link}")
if self.is_taboo(link):
self.logger.warning("Link is taboo, will skip it.")
return
name = self.download_video(link)
self.logger.info(f"Download of {name} (video) was a success.")
self.video_to_audio(name)
self.add_to_taboo(link)
if not keep_video:
self.remove_video(name)
self.logger.critical(f"Successfully downloaded {name}. Available at {self.dir_music}.")
def get_musics_linear(self, url_list):
""" Linear download of all links from list """
for link in url_list:
self.download_one(link)
@run_safe
def get_musics_parallel(self, url_list, num_procs=3):
""" Parallel download of all links from list """
with Pool(num_procs) as p:
print("here")
p.map(self.download_one, url_list)
print("there")
def is_taboo(self, link):
""" Verifies if link exists in the taboo file """
return utils.is_in_file(self.taboo_path, link)
def add_to_taboo(self, link):
""" Adds link to the taboo file """
utils.append_to_file(self.taboo_path, link)
def download_video(self, link):
""" Downloads the highest resolution video given a link. Returns file name """
yt = YouTube(link)
yt.streams.filter(progressive=True).order_by("resolution").desc().first().download(self.dir_video, yt.title)
return utils.safe_filename(yt.title)
def download_audio(self, link):
""" Downloads only the audio of a given link. Returns file name """
yt = YouTube(link)
yt.streams.filter(only_audio=True).first().download(self.dir_audio, yt.title)
return utils.safe_filename(yt.title)
def video_to_audio(self, name):
""" Converts a video to an audio file """
self.logger.info("Converting video to audio.")
video_f_path = os.path.join(self.dir_video, "{}{}".format(name, ".mp4"))
audio_f_path = os.path.join(self.dir_audio, "{}{}".format(name, ".wav"))
cmd_list = ["ffmpeg", "-i", video_f_path, "-f", "wav", "-ab", "19200", "-vn", audio_f_path]
FNULL = open(os.devnull, 'w')
subprocess.call(cmd_list, stdout=FNULL, stderr=subprocess.STDOUT)
def remove_video(self, name):
""" Deletes a video file """
self.logger.info("Removing video file.")
video_f_path = os.path.join(self.dir_video, "{}{}".format(name, ".mp4"))
if os.path.exists(video_f_path):
os.remove(video_f_path)
运行此代码时,出现以下错误:
File "C:\Users\Y\PycharmProjects\pyMusic\lib\pyMusic.py", line 143, in get_musics_parallel p.map(self.download_one, url_list) File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\multiprocessing\pool.py", line 266, in map return self._map_async(func, iterable, mapstar, chunksize).get() File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\multiprocessing\pool.py", line 644, in get raise self._value File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\multiprocessing\pool.py", line 424, in _handle_tasks put(task) File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\multiprocessing\connection.py", line 206, in send self._send_bytes(_ForkingPickler.dumps(obj)) File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\multiprocessing\reduction.py", line 51, in dumps cls(buf, protocol).dump(obj) TypeError: can't pickle _thread.RLock objects
但是,如果我删除记录器,代码执行时不会出现任何问题。
知道记录器为何导致此 pickle 错误吗?错误发生在“get_musics_parallel”函数上,并发生在 map(self.download_one, urllist) 行上。
我尝试用谷歌搜索此错误,但与此pickle错误相关的问题似乎与我的问题无关。
感谢您的帮助,亲切的问候
最佳答案
您不是在某处使用multiprocessing
模块吗?它要求线程/进程之间交换的数据是可选取的。
记录器使用 RLock
它保持着过程的状态,因此不能被 pickle 。 Logger uses it这样,当整个脚本中获取了多个记录器(或同一个记录器)时,它可以发挥不弄乱日志文件(或任何其他日志记录输出)的魔力。
关于python - 添加记录器导致can't pickle _thread.RLock objects错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52019181/
我在 https://code.google.com/p/pyloadtools/wiki/CodeTutorialMultiThreading 找到了这个简单的代码 import _thread d
我尝试从终端启动 webapp2 开发服务器,但收到此错误 > File "/Users/mertbarutcuoglu/Desktop/hellowebapp2/main.py", line 12,
从 ubuntu 10.04 开始,我使用 easy_install 安装了 pylab。升级后,我可以导入 pylab。首先,我运行从 easy_install 安装的 ipython: $ ipy
我正在尝试解析包含汽车属性(154 种属性)的网站。我有一个巨大的列表(名称是 liste_test),其中包含 280.000 个二手车公告 URL。 def araba_cekici(liste_
在此处检查 Stackoverflow 上的所有现有答案后:Checkpointing keras model: TypeError: can't pickle _thread.lock object
这是我的代码 class MusicHandler(object): """ Implements the logic to download musics """ def __ini
致所有尝试开始使用 docker-compose 的好伙伴。我正在运行 OS X El Capitan (10.11)。 系统附带 python 2.7。不建议尝试将系统 python 替换为 pyt
我读过《Core Python Applications Planning》,其中编写了这段代码。 import _thread from time import sleep, ctime loops
阅读了一些类似的问题,其中大多数提到你不应该尝试序列化一个不可序列化的对象。我无法理解这个问题。我可以将模型保存为 .h5 文件,但这并不能达到我想要做的目的。请帮忙! def image_g
我正在使用带有 flask 的 RQ 来循环排队作业。我有以下代码: from rq import Queue from rq.job import Job from worker import co
尝试使用共享队列同时运行两个不同的函数并出现错误...如何使用共享队列同时运行两个函数?这是 Windows 7 上的 Python 3.6 版。 from multiprocessing impor
from keras.layers import Embedding, Dense, Input, Dropout, Reshape from keras.layers.convolutional i
我尝试使用 Cassandra 和 multiprocessing 根据中的示例同时插入行(虚拟数据) http://www.datastax.com/dev/blog/datastax-python
我在 np.save 上收到此错误。请让我知道原因以及如何解决这个问题。下面是我的代码: import cv2 import numpy as np import os from random imp
我正在使用 Keras 创建 ANN 并在网络上进行网格搜索。运行以下代码时遇到以下错误: model = KerasClassifier(build_fn=create_model(input_di
我正在使用来自(事实上的标准)的 Redis 客户端 python 实现:https://pypi.org/project/redis/ 所以我在后台定义了多个worker,每个worker都有一个在
过去似乎在不同的上下文中发生了错误 here ,但我没有直接转储模型——我正在使用 ModelCheckpoint 回调。知道可能出了什么问题吗? 信息: Keras 2.0.8 版 Tensorfl
我遇到了 pydantic.BaseSettings 的问题和 prometheus_client.Summary . 下面的代码片段在尝试执行时抛出异常: from prometheus_clien
在运行 Python 3.6 的 Windows 10 系统上,尝试使用 multiprocessing.Process 时创建一个新的rq worker , multiprocessing.Proc
我使用的是python 3.6 我正在尝试从下面显示的名称 SubmitJobsUsingMultiProcessing() 的类方法内部使用多重处理,该方法进一步依次调用另一个类方法。 我不断遇到此
我是一名优秀的程序员,十分优秀!