Spaces:
Sleeping
Sleeping
File size: 2,537 Bytes
402daee |
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#!/usr/bin/env python
import os
import subprocess
import sys
import argparse
argmap = {
'--redis-bin': {
'default': 'redis-server',
'help': 'Path to Redis server binary (default: %(default)s)' },
'--celery-broker-url': {
'default': 'redis://localhost:6379/0',
'help': 'Celery broker URL (default: %(default)s)' },
'--celery-result-backend-url': {
'default': 'redis://localhost:6379/0',
'help': 'Celery result backend URL (default: %(default)s)' },
'--output-directory': {
'default': 'app/output',
'help': 'Output directory (default: %(default)s)' },
'--output-url-prefix': {
'default': '/output',
'help': 'Output URL prefix (default: %(default)s)' },
'--ffmpeg-bin': {
'default': 'ffmpeg',
'help': 'Path to ffmpeg binary (default: %(default)s)' },
'--asr-engine': {
'default': os.getenv('ASR_ENGINE', 'faster_whisper'),
'help': 'ASR engine to use (default: %(default)s)' },
'--asr-model': {
'default': os.getenv('ASR_MODEL', 'small'),
'help': 'ASR model to use (default: %(default)s)' },
}
parser = argparse.ArgumentParser()
for arg, kwargs in argmap.items():
parser.add_argument(arg, **kwargs)
args = parser.parse_args()
os.environ['CELERY_BROKER_URL'] = args.celery_broker_url
os.environ['CELERY_RESULT_BACKEND'] = args.celery_result_backend_url
os.environ['OUTPUT_DIRECTORY'] = args.output_directory
os.environ['OUTPUT_URL_PREFIX'] = args.output_url_prefix
os.environ['FFMPEG_BIN'] = args.ffmpeg_bin
os.environ['ASR_ENGINE'] = args.asr_engine
os.environ['ASR_MODEL'] = args.asr_model
# Start Redis
print('Starting database...', file=sys.stderr)
subprocess.Popen([args.redis_bin], stdout=subprocess.DEVNULL)
# Start Celery
print('Starting worker...', file=sys.stderr)
subprocess.Popen(['celery', '-A', 'app.worker.celery', 'worker', '--pool=solo', '--loglevel=info'])
# Start Gunicorn
print('Starting application...', file=sys.stderr)
subprocess.Popen(['gunicorn', '--bind', '0.0.0.0:9000', '--workers', '1', '--timeout', '0', 'app.webservice:app', '-k', 'uvicorn.workers.UvicornWorker'])
# Wait for any process to exit
status = os.WEXITSTATUS(os.wait()[1])
print('Process exited with status', status, file=sys.stderr)
# Terminate any child processes
print('Terminating child processes...', file=sys.stderr)
os.system('pkill -P %d' % os.getpid())
# Exit with status of process that exited
print('Exiting with status', status, file=sys.stderr)
sys.exit(status)
|