我可以使用多处理进行并行化吗?

时间:2012-06-13 15:39:08

标签: python

此代码来自:http://code.activestate.com/recipes/577090-file-encryption-using-stream-cipher/

import sys 
import random 

if len(sys.argv) != 4: 
    print "Usage: encdec_.py longintkey [path]filename1 [path]filename2" 
    sys.exit()   
random.seed(long(sys.argv[1])) # key 
f1 = open( sys.argv[2], "rb") 
bytearr = map (ord, f1.read () ) 
f2 = open( sys.argv[3], "wb" ) 
for i in range(len(bytearr)): 
    f2.write(chr(bytearr[i] ^ random.randint(0, 255))) 
f1.close() 
f2.close() 

可以使用multiprocessing

并行化此代码

2 个答案:

答案 0 :(得分:3)

通常你会将文件分成多个部分并将每个部分发送到一个单独的进程进行多处理,但在这种情况下这不起作用,因为你需要从同一个种子顺序生成随机数。

如果您愿意更改加密算法,可以通过多种方法将其设置为能够处理多个块。但是,“流密码”特别不适合这种事情。

您可以先生成随机数,然后将生成的数字与其位置一起提供给多个流程,但这样可能会减慢速度,从而加快速度。

所以我会说“不”,你不能进行多处理,至少不是以实际的方式。

(我假设这是一个实验或学习练习,你并不是想用它来进行严肃的加密。如果你试图将它用于严肃的事情,那么有许多全功能的加密库函数可供选择从。)

答案 1 :(得分:1)

您无法并行化IO操作。所以你应该做的是读取输入文件,创建随机值列表,然后使用多处理创建字符串。然后,您可以将其写入输出文件。为此,请创建一个类似的函数:

def myprocessing(args):
    byte, randVal = args
    return chr(ord(byte) ^ randVal)

字节来自f1。 randVal来自随机值列表。然后,您可以将pool.map与myprocessing一起使用并编写结果。