<p>基本上,你想把电机的速度从一个运行的<code>script1.py</code>发送到一个正在运行的<code>script2.py</code>,对吗?在</p>
<p><strong>注意:</strong>从一个文件导入某个文件不会将该文件作为一个单独的进程运行!在</p>
<p>要使正在运行的程序交换数据,必须</p>
<ol>
<li>运行程序</li>
<li>设置进程间通信(“IPC”)或它们之间的共享内存。在</li>
</ol>
<p>至少有三种方法可以启动两个脚本,使它们同时运行。在</p>
<p>A)从命令行</p>
<pre><code>python script1.py &
python script2.py &
</code></pre>
<p>B)使用<code>subproces</code>。在<code>script1.py</code>do中</p>
^{pr2}$
<p>C)使用<code>multiprocessing</code></p>
<pre><code>import multiprocessing as mp
import script2
p = mp.Process(target=script2.main) # Assuming script2 has a main function.
p.start()
</code></pre>
<p>如何进行IPC取决于如何启动脚本。在</p>
<p>在这三种情况下,您都可以使用<a href="https://docs.python.org/3.5/howto/sockets.html" rel="nofollow">sockets</a>作为通信手段。您必须将<code>script2</code>设置为所选端口号(比如12345)上的服务器。如果<code>script1</code>想要增加或降低电机速度,它将连接到端口12345并发送包含新电机速度的消息。除了链接的howto之外,还有很多socket教程,这里的详细答案可能太长了。在</p>
<p>如果选择使用<code>multiprocessing</code>(选项C),则可以使用共享内存<a href="https://docs.python.org/3.5/library/multiprocessing.html#sharing-state-between-processes" rel="nofollow">^{<cd9>}</a>。在</p>
<pre><code># script1
import multiprocessing as mp
import script2
motorspeed = mp.Value('d', 0.0)
p = mp.Process(target=script2.main, args=(motorspeed,))
p.start()
</code></pre>
<p>当然<code>script2.main</code>应该识别一个参数!
<em>两个进程现在都可以操作<code>motorspeed</code>对象。在</p>
<p>如果<code>script2</code>也可以改变<code>motorspeed</code>是不可取的,那么可以设置<a href="https://docs.python.org/3.5/library/multiprocessing.html#exchanging-objects-between-processes" rel="nofollow">^{<cd14>}</a>。在</p>
<pre><code># script1
import multiprocessing as mp
import script2
parent_conn, child_conn = mp.Pipe(duplex=False)
p = mp.Process(target=script2.main, args=(child_conn,))
p.start()
motorspeed = 23.6
parent_conn.send(motorspeed)
</code></pre>
<p>在这种情况下,<code>script2.main</code>应该定期阅读消息!在</p>
<p>总之,我建议走<code>multiprocessing</code>路线,因为它有最简单的建立沟通的方式。在</p>