小编Gab*_*iel的帖子

Python多处理池不能创建足够的进程

我正在运行40GB数据的计算.每个文件都是一个包含json行的压缩gzip文件.每个文件最多有500,000行,或大约500MB.我有一个运行128 cpu和1952 GB内存的亚马逊实例.我要做的是尽快处理每个文件.

我正在使用这样的多处理池:

def initializeLock(l):

    global lock
    lock = l

if __name__ == '__main__':
    directory = '/home/ubuntu/[directory_containing_files]/*.gz'
    file_names = glob.glob(directory)

    lock = Lock()
    pool = Pool(initializer=initializeLock, initargs=(lock,))
    pool.map(do_analysis, file_names)
    pool.close()
    pool.join()
Run Code Online (Sandbox Code Playgroud)

我期望发生的是创建大量进程,每个进程处理一个文件.实际发生的是最初创建了100多个进程.在这一点上,我使用了大约85%的记忆力,这太棒了!然后每个完成.最终运行的进程数量下降到大约10.此时我只使用了5%的内存.定期启动其他进程,但它永远不会恢复运行100左右.所以我拥有这个拥有所有这些空闲内存的大型CPU,但我大部分时间都在运行大多数10个进程.

任何想法,如何让它继续运行100个进程,直到所有文件都完成?

编辑:

我在应用程序中添加了一些日志记录 最初它加载了127个进程,我认为这是因为我有128个CPU,其中一个在加载进程时正在使用.某些过程成功完成,结果已保存.然后在某些时候,只有少数正在运行的进程结束.当我检查完成了多少文件时,127个中的22个完成了.然后它只使用5-10个进程运行,所有这些都成功完成.我想也许它会耗尽内存和崩溃.但为什么?我有很多内存和很多CPU.

编辑2:

所以我发现了这个问题.问题是我在do_analysis方法中设置了一个锁,并且所有进程大约在同一时间完成并等待锁被释放.这些过程没有停止,他们正在睡觉.所以这让我想到另一个问题:我的主要目标是获取具有许多json行的每个文件,从json行获取ID属性,然后将其附加到包含具有相同id的其他行的文件.如果文件不存在,我创建它.我所做的是在访问文件时设置锁定,以避免被另一个进程访问.这是我的代码.

for key, value in dataframe.iteritems():
    if os.path.isfile(file_name):
        lock.acquire()
        value.to_csv(filename), mode='a', header=False, encoding='utf-8')
        lock.release()
    else:
        value.to_csv(filename), header=True, encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)

所以现在我正在尝试一种创造性的方式来附加到文件,但不会阻止其他所有进程.我正在处理大量数据,并且需要同时访问两个文件的可能性很低,但它仍然会发生.所以我需要确保在附加文件时,另一个进程不会尝试打开该文件.

python pool multiprocessing amazon-web-services pandas

9
推荐指数
1
解决办法
680
查看次数

绘制斐波那契弧

我正在尝试创建一个类似于这些的Fibonacci Arcs应用程序. 股票图表斐波纳契弧

但是,我想要完整的圆圈而不是圆弧,我想绘制的图片超过图片中显示的三条斐波纳契线.我已经使用JFreeChart创建了一个应用程序来尝试完成此任务.但是,这是尝试绘制上一张图片中显示的相同弧(但作为圆圈)时的结果.我的应用放大了

最初,它只是看起来不对,但是当我缩小时,它确实是一个圆圈,但它太大了. 在此输入图像描述

要计算弧线,你绘制一条线,然后取一个斐波那契比例 - 让我们使用.381例如 - 该线的百分比.如果你看第一张照片,你会看到最里面的圆弧与直线相交,直线距离圆心的距离为.381%.首先,我计算这一点.然后我构建一条从.381%点到中心的线.然后我取这条线的距离,这应该是半径.然后我用这个半径绘制圆圈.

这是计算半径的代码.停止和开始是绘制线的停止点和起点.

multiplier = ratio38Value + i;
diffx = (stop.getX() - start.getX()) * multiplier;
diffy = (stop.getY() - start.getY()) * multiplier;
xValue = start.getX() + diffx;
yValue = start.getY() + diffy;
point = new Point(xValue, yValue);
lineSegment = new Line(point, stop);
radius = lineSegment.getDistance();
circle = new Circle(stop.getX(), stop.getY(), radius);
circles.add(circle);
Run Code Online (Sandbox Code Playgroud)

这是计算线距离的代码

public double getDistance(){
    double x = Math.pow(endPoint.getX() - startPoint.getX(), 2);
    double y = Math.pow(endPoint.getY() - startPoint.getY(), 2);
    return Math.sqrt(x + …
Run Code Online (Sandbox Code Playgroud)

java math jfreechart fibonacci

7
推荐指数
1
解决办法
491
查看次数

添加外键Django时列不存在错误

我似乎无法弄清楚这个问题。我在 django 中有一堆模型,然后在加载一些数据后,我决定向其中两个模型添加外键。我运行了 schemamigration,并被告知我需要指定一个默认值,并且我指定了“”。迁移成功了,但现在每当我尝试使用其中一个表时都会收到错误。

“列 myapp_mytable.myforeignkey_id 不存在”。

我已经刷新了数据库,删除了所有表,删除了所有迁移文件,但这些都不起作用。

下面是两个不起作用的模型的相关代码。

class TLOQuery(models.Model):
    searchData = models.ForeignKey(Search, blank=True, null=True)

class TLOPersonSearchOutput(models.Model):
    searchQuery= models.ForeignKey(TLOQuery, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

注意:还有一些其他错误消息。最初它告诉我无法更改 myforiengkey 字段,因为它不存在。它还告诉我整个表不存在。但是,由于刷新数据库,删除所有表并删除所有迁移,每当我尝试在表上调用某些命令时,我都会收到上述错误,例如

print(myModel1.objects.all())
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激!

编辑:这是实际的消息。

In [5]: print (TLOQuery.objects.all())
---------------------------------------------------------------------------
ProgrammingError                          Traceback (most recent call last)
<ipython-input-5-634eb4f16f42> in <module>()
----> 1 print (TLOQuery.objects.all())

/usr/local/lib/python2.7/dist-packages/django/db/models/query.pyc in __repr__(self)
     69
     70     def __repr__(self):
---> 71         data = list(self[:REPR_OUTPUT_SIZE + 1])
     72         if len(data) > REPR_OUTPUT_SIZE:
     73             data[-1] = "...(remaining elements truncated)..."

/usr/local/lib/python2.7/dist-packages/django/db/models/query.pyc in __iter__(self)
     94                - Responsible for turning the …
Run Code Online (Sandbox Code Playgroud)

python django django-models

5
推荐指数
1
解决办法
6788
查看次数

将文件压缩为字节 Python 3

我想在 postgres 数据库中存储一个 zip 文件。列是类型bytea

尝试获取 json 文件或 csv 文件的字节时,我可以使用它

with open(filename, encoding='utf-8') as file_data:
    bytes_content = file_data.read()
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用 zip 文件,甚至是 xls 文件,则会出现错误。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 14: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

我做了一些搜索,有人建议更改为编码类型,我试过latin-1ISO-8859-1,这两者都给我一个错误。

ValueError: A string literal cannot contain NUL (0x00) characters.
Run Code Online (Sandbox Code Playgroud)

关于如何获取 zip 文件的字节以便我可以将其存储在 postgres 数据库中的任何想法?

postgresql excel zipfile python-3.x

4
推荐指数
1
解决办法
5936
查看次数