Python中文
首页
教程
问答
标签
搜索
登录
注册
如何在Python中将bytes对象正确地传递给新线程?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我试图读取一个1GB的文件,将其分块成4MB的文件,然后使用多个线程分别上传这些文件。但是,我认为我没有正确地传递“chunk”对象。我怀疑这行可能不正确:</p> <pre><code>threading.Thread(target=UploadFile, args=[filename, chunk]).start() </code></pre> <p>在将“chunk”作为参数传递之前,是否需要复制它?我担心的是在这个例子中“chunk”不是线程安全的,因此上传的chunk将与源数据不一致。你知道吗</p> <p>以下是完整的方法:</p> <pre><code>def ChunkAndUpload(inputFilename): global runningThreadCount maxThreads = 10 chunkSize = 1024*1024*4 index = 0 with open(inputFilename, "rb") as f: while True: chunk = f.read(chunkSize) if not chunk: break filename = str(index) + ".dat" while (True): if (runningThreadCount<maxThreads): runningThreadCount += 1 threading.Thread(target=UploadFile, args=[filename, chunk]).start() break else: sleep(.1) index+=1 </code></pre> <p>谢谢你!你知道吗</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>即使参数通过引用传递给新线程(因此对块的更改将显示在另一个线程中),代码也不会<em>将</em>写入块字节数组,每次从<code>f.read</code>引用一个新的bytes对象也很简单。因此,看起来您应该是安全的,尽管如果上传速度足够慢,您可能会立即将整个文件读入内存。你知道吗</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
为什么我的神经网络模型的准确性不能在这个训练集上得到提高?
10 回答
为什么我的神经网络模型的权重变化不大?
9 回答
为什么我的神经网络的成本不断增加?
10 回答
为什么我的神经网络的输入pickle文件是19GB?
1 回答
为什么我的神经网络给属性错误?“非类型”对象没有属性“形状”
6 回答
为什么我的神经网络训练这么慢?
3 回答
为什么我的神经网络输出错误?
5 回答
为什么我的神经网络预测适用于MNIST手绘图像时是正确的,而适用于我自己的手绘图像时是不正确的?
2 回答
为什么我的神经网络验证精度比我的训练精度高,而且它们都是常数?
1 回答
为什么我的私人用户间聊天会显示在其他用户的聊天档案中?
5 回答
为什么我的积分的绝对误差估计值大于积分(使用scipy.integrate.nqad)?
1 回答
为什么我的积层回归器得分比它的组件差?
2 回答
为什么我的移动方法不起作用?
1 回答
为什么我的稀疏张量不能转换成张量
2 回答
为什么我的稀疏张量不能转换成张量?
2 回答
为什么我的程序“停止”了?
8 回答
为什么我的程序一直试图占用所有可用的CPU
2 回答
为什么我的程序不使用指定的代理
5 回答
为什么我的程序不工作(python帮助中的反向函数)?
1 回答
为什么我的程序不工作时,我使用多处理模块
1 回答