Почему эта функция не выигрывает от многопоточности? - PullRequest
0 голосов
/ 02 декабря 2018

знает ли кто-то, почему выполнение функции 1 занимает больше времени, чем выполнение функции 2, хотя функция 1 является многопоточной и должна использовать системные ресурсы лучше, чем функция 2?Я действительно понятия не имею, если и где я допустил ошибку при реализации многопроцессорной обработки.

Функция 1:

def encrypt(message, keyname="publicKey.rsa"):
"""
Encrypts or decrypts a hex message.
:param message: Must be a hexadecimal number. Example: 3e40f3ad, not: 0x3e40f3ad
:param keyname: Must be the name of the keyfile in the RSA-420 path.
:return: Returns encrypted or decrypted hexadecimal string (Example: "4723d8ea") with spaces as block splitters.
"""
crypted = ""
key = readkey(keyname)
exp, mod = format(int(key[0], 16), "x"), format(int(key[1], 16), "x")
blocklength = len(mod) - 1
blockcount = int(math.ceil(len(message)/blocklength))
results = []
pool = tp(processes=6)
for i in range(blockcount-1):
    results.append(None)
for i in range(blockcount-1):
    part = message[i*blocklength:((i+1)*blocklength)]
    res = pool.apply_async(crypt, args=(int(part, 16), int(exp, 16), int(mod, 16)))
    results[i] = res.get()
for i in range(len(results)):
    crypted += format(results[i], "x") + " "
i = blockcount-1
part = message[i*blocklength:((i+1)*blocklength)]
lastlen = len(part)
crypted += format(pow(int(part, 16), int(exp, 16), int(mod, 16)), "x") + " "
return crypted + str(blocklength) + " " + str(lastlen)

Функция 2:

def encryptold(message, keyname="publicKey.rsa"):
"""
Encrypts or decrypts a hex message.
:param message: Must be a hexadecimal number. Example: 3e40f3ad, not: 0x3e40f3ad
:param keyname: Must be the name of the keyfile in the RSA-420 path.
:return: Returns encrypted or decrypted hexadecimal string (Example: "4723d8ea") with spaces as block splitters.
"""
crypted = ""
key = readkey(keyname)
exp, mod = format(int(key[0], 16), "x"), format(int(key[1], 16), "x")
blocklength = len(mod) - 1
blockcount = math.ceil(len(message)/blocklength)
for i in range(blockcount-1):
    part = message[i*blocklength:((i+1)*blocklength)]
    crypted += format(pow(int(part, 16), int(exp, 16), int(mod, 16)), "x") + " "
i = blockcount-1
part = message[i*blocklength:((i+1)*blocklength)]
lastlen = len(part)
crypted += format(pow(int(part, 16), int(exp, 16), int(mod, 16)), "x") + " "
return crypted + str(blocklength) + " " + str(lastlen)

Я протестировал шифрованиеФайл размером 206 КБ, содержащий оба кода и многопоточный, всегда работает на 3% медленнее, хотя он должен быть ближе к 600% быстрее, поскольку в моей системе 6 физических ядер.

Спасибо за помощь заранее!

...