Skip to content

Instantly share code, notes, and snippets.

@internetimagery
internetimagery / gevent_poll_loop.py
Last active July 20, 2022 10:29
Super simple gevent qt loop polling
from PyQt5 import QtWidgets, QtCore
import gevent
def test():
print("PRESSED")
for i in range(5):
gevent.sleep(1)
print("Waited", i)
print("Done")
@internetimagery
internetimagery / lazy_import.py
Last active July 20, 2022 09:20
Lazy importing
from __future__ import print_function
import re
import imp
import sys
import time
import types
import inspect
import logging
import threading
@internetimagery
internetimagery / local_import.py
Last active July 8, 2022 08:35
Localize imports in batch. So modules are imported as they are needed. Useful when trying to improve import times.
# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
# fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# Example:
@internetimagery
internetimagery / wrap_iter.py
Last active July 5, 2022 10:33
Wrap Iterators so they can be sent to multiprocessing managers. For example SyncManager.Pool
# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
# fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# Pickle iterator for multiprocessing.Manager
@internetimagery
internetimagery / submit_it.py
Created July 4, 2022 09:41
Simple job submitter for multiprocessing.SyncManager
from __future__ import print_function
from threading import Thread
from pickle import dumps, loads
from six.moves.queue import Empty
from itertools import chain, count
from multiprocessing.util import Finalize
from concurrent.futures import Future, ProcessPoolExecutor
@internetimagery
internetimagery / apipkg_gen.py
Last active July 5, 2022 01:22
Generate apipkg setups for existing modules. Simple way to transition to the apipkg setup which can then be maually tweaked to suit.
# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
# fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# Example usage: python /path/to/this/file/apipkg_gen.py _modulename -o /path/to/modulename.py
@internetimagery
internetimagery / process_manager.py
Last active June 28, 2022 09:24
Register Process on multiprocessing.manager class
# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
# fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# Access to Process from multiprocessing managers
@internetimagery
internetimagery / spawn_manager.py
Last active June 27, 2022 09:26
Spawn manager. Launch a manager in another process. Useful when python is embedded in another application (ie maya) and cannot fork.
# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
# fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# Example usage: python /path/to/this/file/spawn_manager.py --demo
@internetimagery
internetimagery / executor_manager.py
Last active June 27, 2022 08:08
Remote Executor (ProcessPoolExecutor / ThreadPoolExecutor manager)
# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
# fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# Access to PoolExecutors from multiprocessing managers
@internetimagery
internetimagery / gen_proc.py
Created June 13, 2022 10:22
Simple decorator to run generator in another process
from multiprocessing import Queue, Event, Process, ProcessError
from inspect import isgeneratorfunction
from functools import wraps, partial
from queue import Empty
def yieldFromProcess(initializer=None):
"""
Decorator to run a generator function in another process.
All data in and out needs to be pickleable.