Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

multiprocessing.process._children is not multithread-safe, BaseProcess.close() function would cause AttributeError #104536

Closed
gtopper/taos-ws-py-wrapper
#1
Assignees
gpshead
@z764969689

Description

@z764969689

Bug report

I have a project that uses threading.Thread and multiprocessing.Process for handling concurrent tasks. While under certain circumstances, there is the possibility that when I try new aProcess() instance and call theProcess.start() function, an error would occur:
AttributeError: 'NoneType' object has no attribute 'poll'

I tried debugging my project and found that under themultiprocessing.process module a global variable_children is used for managing all child processes, the variable is not thread-safe and the error would occur occasionally. I made a simple test code with minor modification on themultiprocessing.process

test.py

frommultiprocessingimportProcessfromthreadingimportThreaddefhelper():time.sleep(0.1)return1defclose_process(p_:Process):p.terminate()p_.close()if__name__=="__main__":process_list= []for_inrange(1):p=Process(target=helper)p.start()time.sleep(0.2)process_list.append(p)for_inrange(1):t=Thread(target=close_process,args=(process_list[_],))t.start()new_p=Process(target=helper)time.sleep(0.2)new_p.start()

multiprocessing.process.py class BaseProcess

defclose(self):'''        Close the Process object.        This method releases resources held by the Process object.  It is        an error to call this method if the child process is still running.        '''ifself._popenisnotNone:ifself._popen.poll()isNone:raiseValueError("Cannot close a process while it is still running. ""You should first call join() or terminate().")self._popen.close()self._popen=Noneimporttimetime.sleep(5)delself._sentinel_children.discard(self)self._closed=True

I simply addtime.sleep() forBaseProcess.close() class and now every time I run the test.py, the error would occur.

Your environment

  • CPython versions tested on: python 3.7
  • Operating system and architecture: windows 10 or linux el7

Linked PRs

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions


    [8]ページ先頭

    ©2009-2025 Movatter.jp