J'essaie de partager certaines chaînes entre les processus en utilisant la partie sharedctypes du module multitraitement.Stockage des chaînes dans un multi-traitement sharedctypes Array
TL; DR: Je souhaite mettre mes cordes dans un tableau de sharedctypes, comme ceci:
from multiprocessing.sharedctypes import Array
Array(ctypes.c_char, ['a string', 'another string'])
Plus d'informations:
Les docs ont cette note:
"Notez qu'un tableau de ctypes.c_char a une valeur et des attributs bruts qui permettent de l'utiliser pour stocker et récupérer des chaînes. "
En utilisant c_char
seul:
from multiprocessing.sharedctypes import Array
Array(ctypes.c_char, ['a string', 'another string'])
Je reçois une erreur de type, ce qui est logique:
TypeError: one character bytes, bytearray or integer expected
Cela peut (un peu) le travail par splittingthe aiguillon pour octets (ce qui rend aussi sens):
from multiprocessing.sharedctypes import Array
multiproccessing.sharedctypes.Array(ctypes.c_char, [b's', b't', b'r', b'i', b'n', b'g'])
Mais ce n'est pas très pratique f ou stocker de grandes listes de chaînes.
Cependant quand j'ai essayé d'utiliser les value
et raw
attributs figurant dans la documentation here et mentionnés dans cette note il n'y a toujours pas de magie:
Array(ctypes.c_char.value, ['string'])
donne cette erreur:
TypeError: unsupported operand type(s) for *: 'getset_descriptor' and 'int'
et raw
donne ceci:
Array(ctypes.c_char.raw, ['string'])
AttributeError: type object 'c_char' has no attribute 'raw'
I ont également essayé d'utiliser le type c_wchar_p
qui, dans la table de primitives des types de données compatible C (qui se trouve dans le docs) correspond directement à une chaîne:
Array(ctypes.c_wchar_p, ['string'])
Ce CRASHES python, aucun code d'erreur est signalé, le processus se termine simplement par le code 0.
Pourquoi les tableaux sharedctypes ne peuvent-ils pas contenir de pointeurs comme le type c_wchar_p? toute autre solution ou conseil sur la façon de stocker des chaînes dans une grappe de type sharedctype est la bienvenue!
Mise à jour - Ce code parfois œuvres (la plupart des arrêts mais python travail de temps de temps en temps j'obtenir des chaînes en arrière, même si elles sont la plupart du temps charabia). mais les commentaires mentionnent qu'il fonctionne bien sur les fenêtres.
from multiprocessing import Process, Lock
from multiprocessing.sharedctypes import Value, Array
import ctypes
def print_strings(S):
"""Print strings in the C array"""
print([a for a in S])
if __name__ == '__main__':
lock = Lock()
string_array = Array(ctypes.c_wchar_p, ['string'])
q = Process(target=print_strings, args=(string_array,))
q.start()
q.join()
Mise à jour 2
C'est le charabia je reçois:
[vue « de la lèpre Jiu de chasse Ji Qian Li numéro poignardé Gai \ u2e73 ਊ †† Duo \ u2065 jus Tu \ u200a † ჰⴭⴭⴭ ਭ †† Yue Yan \ u2e79 Hui Wan Lian \ u2e6c scabies \ u202c Yue Yan \ u2e79 Hui Wan Lian \ u2e6c scabies \ u0a65 \ u200a † Qiu Lang Jiao \ u200a † ჰⴭⴭ \ u200a † Ya \ u2065 chasse \ u2065 arbalétrier \ u2065 Wuzhenweifu \ u206d Yituhuitou \ u2064 te 䌠 roi traquant généreux ⁷ ㅛ Yiyunqiaoju Hanfangtusan \ Mi \ u200a † 䄠 Laobohunying ⁺ Yu \ u2064 Lianlaiyoucan Huang \ u2c5f Ying Gumianzhendang Tian Yi Touyingyousuo \ u206e Runyintongqian ੳ † Weiqiangyingyi Xia \ de Tongzhutiantou décanté Tian Qian Li Fangqingxiecan de ressentiment ⰸ ⠠ Qiao Tong Yang \ le u202c Yu \ u2064 Taodenlutou \ u0a76 †† Kuizhichaoye Mei Tang Wumojiuyu \ u2073 Mu \ Qian de Yitaizhentang \ u206e Zaodangqianli Fang Qing \ u2e6c Shanzhishilai \ Fang pigwash \ u2072 soupe \ u200a † Tiantoushuowu Yu \ u206e se ㌬ Ziqingmeifei 䤠 䕅 ⁅ Mu Ying Lanwenlieqian \ u2073 Rundayangli Tangcan 崳 \ u205f Querenchitong \ u2067 \ u0a61 numéro †† Huan désert \ u2066⸵ « ressentiment kai arbalétrier Yau ㄭ \ u206e Hong \ u2073 roi ㄠ 㐮 ⵥ 㘱 ⠠ \ u206e‽ 〳〰⤰ਮ \ u200a † Shanhanfangtu San ੳ †† ⴭⴭⴭⴭⴭ \ u200a † ⸠ \ u202e ㅛ ⁝ \ u2e43 Ya \ u202e Patubenshui \ u202c 䌢 Toumibenzheng Ceonfang Xiao \ u2073 inondé \ u2072 arbalétrier illicite Yashiliewu reflètent Yousuoyixian Ⱒ Qian 8 ††††† ⨠ Shenshitangwu Suipiaomeiguan \ u206c panique Huangmanzhujin 䴠 Shi Touyinshiguan \ u206c Mutu Jiao Ⱚ stérile Hong \ u202e ⰵ 䰠 soupe exécutez 㩮 \ u200a ††††† effet \ u2072 éclat indigné Duo de pierres précieuses ❹ \ u2073 Lianshiyixia Jinzhuanhuilie ⱥ ㄠ 㘹 ⸲ \ u200a † ⸠ \ u202e㉛⁝ \ u2e4d 䄠 Laobohunying ⁺ Yu \ u2064 \ u2e49䄠 \ u202e Lian à vous \ u202c 䠪 balancer Yu Xun \ u206b roi 䴠 Shi Touyintiguan 6 ††††† 䘠 Yousuoyixian Ⱚ ㄠ Yan \ Choutongshibei de \ u202c enseignement avec ⁷ ans Wei> Shu Zhen ⱳ ㄠ 㘹 ⰴ Ying \ u2e70㌠ 㤷 ਮ ††††† Renjue 㩰 ⼯ Jian \ u2e77 Yinfuxianqi Ti ⽡ Wodousongyu Dunyingtiaoyan 㜳 ⸹ Jin 7 †† ⸮ peut 崳 Renjue 㩰 ⼯ Wan Ai oser Mudangtiwei \ u2e6e Jin Yun tourne ⽧ vétérinaire 䴯 Shi \ u2d68 Min Kuojiao 䴯 Shi Min Kuojiaoeryu 6 \ u200a † 䔠 Di détruire le roi ੳ †† ⴭⴭⴭⴭ \ u200a † exécution 㸾 canal \ u2e70 Ci-do ⸰⥝ \ u200a † offres fades Chai ㄨ 〮 \ u0a29 †† 㸾 - Guangshen ⠰ se Ⱞ ㄠ \ u20 2e \ u202b Diffusion Section ⥝ \ u200a † offres fades Chai Ci ㄠ 〮〰〰〰⬰⸰ \ u206a ††† Ⱐ † ⸰ 㠱 㠷 ㌵㌷〫 㘮 㘴 㘱 㐹 piquet ⥝ਊ †† '' ਊ †† Duo \ u2065 jus Tu \ u200a † ჰⴭⴭⴭ ਭ †† Yue Yan \ u2e79 Hui Wan Lian \ u2e6c scabies \ u202c Yue Yan \ u2e79 Hui Wan Lian \ u2e6c scabies \ u0a65 \ u200a † Qiu Lang Jiao \ u200a † ჰⴭⴭ \ u200a † Ya \ chasse u2065 \ u2065 arbalétrier \ u2065 Wuzhenweifu \ u206d Yituhuitou \ u2064 te 䌠 roi traquant généreux ⁷ ㅛ Yiyunqiaoju Hanfangtusan \ Mi \ u200a † 䄠 Laobohunying ⁺ Yu \ u2064 Lianlaiyoucan Huang \ u2c5f Yinggumianzhen Dangtiantouying Vous Suo Yi \ u206e Runyintongqian ੳ †† Weiqiangyingyi Xia \ de Dongzhutiantou décanté le ressentiment de Tian Li Qian Yang Dong Qiao Fangqingxiecan ⥦ ⠠ ⰸ \ u202c Yu \ u2064 Taodenlutou \ u0a76 †† Kuizhichaoye Wumojiuyu Mei Tang \ Mu \ u2065 Yataizhentang Qian \ u206e Zaodangqianli Fang Qing \ u2e6c Shanzhishilai \ u2065 Fang pigwash \ u2072 soupe \ u200a † Tiantoushuowu Yu \ u206e se ㌬ Ziqingmeibei 䤠 䕅 ⁅ Mu Ying Lanwenlieqian \ u2073 Rundayangli Tangcan 崳 \ u205f Xirenchidong \ u2067 \ u0a61 †† nombre de joie désert \ u2066⸵ « ressentiment kai arbalétrier Yau ㄭ \ u206e Hong \ u2073 roi ㄠ 㐮 ⵥ 㘱 ⠠ \ u206e‽ 〳〰⤰ਮ \ u200a † Shanhanfangtu San ੳ †† ⴭⴭⴭⴭⴭ \ u200a † ⸠ \ u202e ㅛ ⁝ \ u2e43 Ya \ u202e Patubenshui \ u202c 䌢 Toumibenzheng Ceonfang Xiao \ u2073 inondé \ u2072 arbalétrier illicite Yashiliewu reflètent Yousuoyixian Ⱒ Qian 8 ††††† ⨠ Shenshitangwu Suipiaomeiguan \ u206c panique Huangmanzhujin 䴠 Shi Touyinshiguan \ u206c Mutu Jiao Ⱚ stérile Hong \ u202e ⰵ 䰠 soupe exécutez 㩮 \ u200a ††††† effet \ u2072 éclat indigné Duo de pierres précieuses ❹ \ u2073 Lianshiyixia Jinzhuanhuilie ⱥ ㄠ 㘹 ⸲ \ u200a † ⸠ \ u202e㉛⁝ \ u2e4d 䄠 Laobohunying ⁺ Yu \ u2064 \ u2e49䄠 \ u202e Lian à vous \ u202c 䠪 balancer Yu Xun \ u206b roi 䴠 Shi Touyintiguan 6 ††††† 䘠 Yousuoyixian Ⱚ ㄠ Yan \ Choutongshibei de \ u202c enseignement avec ⁷ ans Wei> Shu Zhen ⱳ ㄠ 㘹 ⰴ Ying \ u2e70㌠ 㤷 ਮ ††††† Renjue 㩰 ⼯ Jian \ u2e77 Yinfuxianqi Ti ⽡ Wodousongyu Dunyingtiaoyan 㜳 ⸹ Jin 7 †† ⸮ peut 崳 Renjue 㩰 ⼯ Wan Ai oser Mudangtiwei \ u2e6e Jin Yun tourne ⽧ vétérinaire 䴯 Shi \ u2d68 Min Kuojiao 䴯 Shi Min Kuojiaoeryu 6 \ u200a † 䔠 Di détruire le roi ੳ †† ⴭⴭⴭⴭ \ u200a † exécution 㸾 canal \ u2e70 Ci-do ⸰⥝ \ u200a † offres fades Chai ㄨ 〮 \ u0a29 †† 㸾 - Guangshen ⠰ se Ⱞ ㄠ \ u20 2e \ u202b Diffusion Section ⥝ \ u200a † offres fades Chai Ci ㄠ 〮〰〰〰⬰⸰ \ u206a ††† Ⱐ † ⸰ 㠱 㠷 ㌵㌷〫 㘮 㘴 㘱 㐹 piquet ⥝ਊ †† « ]
(oui que apparemment tout est venu de « string », ne me demandez pas comment)
J'ai juste essayé 'Array (ctypes.c_wchar_p, [ 'string'])' et semble fonctionner avec Python 3.5.3 sur Windows ... – jdehesa
@jdehesa ouais j'étais sur le point de mettre à jour quelque chose à ce sujet, ma sortie n'est PAS cohérente - de temps en temps je récupère des chaînes (mais elles sont du charabia) mais la plupart du temps je obtenir une fenêtre indiquant que Windows a planté –
@jdehesa J'ai ajouté une mise à jour d'un programme complet, cela fonctionne-t-il pour vous? (Je suis aussi sur Windows) –