Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int main(int argc, char *argv[])
- {
- Py_Initialize();
- PyEval_InitThreads();
- PyThreadState* mainThreadState = PyThreadState_Get();
- PyInterpreterState * mainInterpreterState = mainThreadState->interp;
- PyEval_ReleaseLock();
- QList<TPyScriptRunnable*> scripts;
- for( int i = 0; i < 2; ++i ){
- PyEval_AcquireLock();
- PyThreadState * myThreadState = PyThreadState_New(mainInterpreterState);
- PyEval_ReleaseLock();
- scripts.push_back( new TPyScriptRunnable( QString("MM%1").arg(i), myThreadState ) );
- }
- // QThreadPool::globalInstance()->setMaxThreadCount( 1 );
- foreach( TPyScriptRunnable *script, scripts )
- QThreadPool::globalInstance()->start(script);
- QCoreApplication a(argc, argv);
- QTimer::singleShot( 5000, &a, SLOT(quit()) );
- a.exec();
- PyEval_RestoreThread(mainThreadState);
- Py_Finalize();
- return 0;
- }
- class TPyScriptRunnable : public QRunnable
- {
- public:
- TPyScriptRunnable( const QString &arg, PyThreadState *threadState )
- : m_arg(arg), m_threadState(threadState) {}
- virtual ~TPyScriptRunnable()
- {
- PyEval_AcquireLock();
- PyThreadState_Swap(NULL);
- PyThreadState_Clear(m_threadState);
- PyThreadState_Delete(m_threadState);
- PyEval_ReleaseLock();
- }
- //
- virtual void run()
- {
- PyEval_AcquireLock();
- PyThreadState_Swap(m_threadState);
- QString str = QString("import time\n"
- "somefilename = open('d:\\py_test\\%1','w')\n"
- "print somefilename.fileno()\n"
- "somefilename.write('111')\n"
- "print somefilename.fileno()\n"
- "time.sleep(1)\n"
- "somefilename.write('222')\n"
- "print somefilename.fileno()\n").arg(m_arg);
- PyRun_SimpleString( str.toAscii().constData() );
- PyThreadState_Swap(NULL);
- PyEval_ReleaseLock();
- }
- private:
- QString m_arg;
- PyThreadState *m_threadState;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement