我正在运行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)
所以现在我正在尝试一种创造性的方式来附加到文件,但不会阻止其他所有进程.我正在处理大量数据,并且需要同时访问两个文件的可能性很低,但它仍然会发生.所以我需要确保在附加文件时,另一个进程不会尝试打开该文件.
我正在尝试创建一个类似于这些的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) 我似乎无法弄清楚这个问题。我在 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) 我想在 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-1和ISO-8859-1,这两者都给我一个错误。
ValueError: A string literal cannot contain NUL (0x00) characters.
Run Code Online (Sandbox Code Playgroud)
关于如何获取 zip 文件的字节以便我可以将其存储在 postgres 数据库中的任何想法?
python ×2
django ×1
excel ×1
fibonacci ×1
java ×1
jfreechart ×1
math ×1
pandas ×1
pool ×1
postgresql ×1
python-3.x ×1
zipfile ×1