1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| import sys
|
| # Monkey patch os.spawnve on windows to become thread safe
| if sys.platform == 'win32':
| import os
| import threading
| from os import spawnve as old_spawnve
|
| spawn_lock = threading.Lock()
|
| def new_spawnve(mode, file, args, env):
| spawn_lock.acquire()
| try:
| if mode == os.P_WAIT:
| ret = old_spawnve(os.P_NOWAIT, file, args, env)
| else:
| ret = old_spawnve(mode, file, args, env)
| finally:
| spawn_lock.release()
| if mode == os.P_WAIT:
| pid, status = os.waitpid(ret, 0)
| ret = status >> 8
| return ret
|
| os.spawnve = new_spawnve
|
|