New submission from Marc Guetg <guetg.m...@gmail.com>:

It seems like sharing a string over processes is not possible.

        #!/usr/bin/env python3
        
        import multiprocessing
        import threading
        import ctypes
        
        
        def fun(share_c, share_s, set_c, set_s, name):
                print(f'{name}: {share_c.value}; {share_s.value}')
                share_c.value = set_c
                share_s.value = set_s
                print(f'{name}: {share_c.value}; {share_s.value}')
        
        
        if __name__ == '__main__':
                share_c = multiprocessing.Value(ctypes.c_wchar, 'a')
                share_s = multiprocessing.Value(ctypes.c_wchar_p, 'aa')
        
                print(f'pre_thread: {share_c.value}; {share_s.value}')
                thread = threading.Thread(target=fun, args=(share_c, share_s, 
'b', 'bb', 'thread'))
                thread.start()
                thread.join()
        
                print(f'post_thread: {share_c.value}; {share_s.value}')
                process = multiprocessing.Process(target=fun, args=(share_c, 
share_s, 'c', 'cc', 'process'))
                process.start()
                process.join()
        
                print(f'post_process: {share_c.value}', end='; ')
                print(share_s.value)  # <--- Blows here

produces: 

        pre_thread: a; aa
        thread: a; aa
        thread: b; bb
        post_thread: b; bb
        process: b; bb
        process: c; cc
        post_process: c; Traceback (most recent call last):
          File "test2.py", line 30, in <module>
            print(share_s.value)  # <--- Blows here
          File "<string>", line 5, in getvalue
        ValueError: character U+ff92f210 is not in range [U+0000; U+10ffff]

Where the character value in the error message is different every time. To me 
this seems like a bug as it is working properly with threads as well as single 
characters. (Maybe relevant question also here: 
https://stackoverflow.com/questions/47763878/how-to-share-string-between-processes?noredirect=1#comment82492062_47763878)

For the case it matters:
Python 3.6.1 (Anaconda 4.4.0) on RHEL 6

----------
components: Library (Lib), Unicode
messages: 308144
nosy: ezio.melotti, magu, vstinner
priority: normal
severity: normal
status: open
title: Value error for string shared memory in multiprocessing
type: crash
versions: Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue32291>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to