小编Pha*_*nto的帖子

在Python的调用者线程中捕获线程的异常

我对Python和多线程编程很新.基本上,我有一个脚本,将文件复制到另一个位置.我希望将它放在另一个线程中,以便我可以输出....以指示脚本仍在运行.

我遇到的问题是,如果文件无法复制,它将引发异常.如果在主线程中运行,这是可以的; 但是,具有以下代码不起作用:

try:
    threadClass = TheThread(param1, param2, etc.)
    threadClass.start()   ##### **Exception takes place here**
except:
    print "Caught an exception"
Run Code Online (Sandbox Code Playgroud)

在线程类本身,我试图重新抛出异常,但它不起作用.我看到这里的人问类似的问题,但他们似乎都在做一些比我想做的更具体的事情(而且我不太了解提供的解决方案).我见过人们提到使用它sys.exc_info(),但我不知道在哪里或如何使用它.

非常感谢所有帮助!

编辑:线程类的代码如下:

class TheThread(threading.Thread):
    def __init__(self, sourceFolder, destFolder):
        threading.Thread.__init__(self)
        self.sourceFolder = sourceFolder
        self.destFolder = destFolder

    def run(self):
        try:
           shul.copytree(self.sourceFolder, self.destFolder)
        except:
           raise
Run Code Online (Sandbox Code Playgroud)

python multithreading exception-handling exception

178
推荐指数
10
解决办法
15万
查看次数

从GeoTIFF文件获取纬度和经度

在Python中使用GDAL,如何获得GeoTIFF文件的纬度和经度?

GeoTIFF似乎不存储任何坐标信息.相反,它们存储XY原点坐标.但是,XY坐标不提供左上角和左下角的纬度和经度.

看来我需要做一些数学来解决这个问题,但我不知道从哪里开始.

执行此操作需要什么程序?

我知道这个GetGeoTransform()方法对此很重要,但是,我不知道该怎么做.

python math tiff geolocation gdal

40
推荐指数
2
解决办法
3万
查看次数

将GeoTIFF转换为JPEG并在Python中提取GeoTIFF标头

我正在制作一个将在GeoTIFF文件中读取的Python脚本,并将同时执行这两项操作:将GeoTIFF转换为静态JPEG(尺寸要小得多),并创建一个包含GeoTIFF标头的单独文本文件.

使用Python GDAL API,我能够拿到剧本打开的GeoTIFF文件和打印细节,如RasterXSize,RasterYSize,RasterCount,等.

问题在于保存JPEG.我研究了这个driver.CreateCopy()方法,然而,它所做的只是创建一个非常大的JPEG文件,它是空白的,无法打开.

另外,哪个方法检索我可以保存到文件的所有GeoTIFF标头?

我既不是GeoTIFFs也不是GDAL的专家,我非常感谢你的帮助!

python jpeg tiff geospatial gdal

7
推荐指数
1
解决办法
5804
查看次数

在Java中使用System.out.println的多个线程

我有一个多线程Java应用程序,它将收到的有关消息的信息输出到控制台以进行调试.每次应用程序收到消息时,它都会调用System.out.println(String)该消息.

我遇到的问题是,如果应用程序充满了消息,则会System.out.println()输出错误的信息(如旧的缓冲区信息).这让我想知道是否存在线程问题,其中多个线程一次调用该println函数,并且没有正确刷新缓冲区.

在我的主程序(线程)中,我有一些效果:

while(iterator.hasNext())
{
    SelectionKey key = iterator.next();

    channel.receive(buffer);     // The buffer is a ByteBuffer.
    buffer.flip();

    new Thread(new ThreadToPrintTheMessage(buffer)).start();

    buffer.clear();

    iterator.remove();
}
Run Code Online (Sandbox Code Playgroud)

在我的帖子中,我有一些效果:

@Override
public void run()
{
    System.out.println(message);
    System.out.flush();   // I have better results with this.  But, it doesn't
                          // fully resolve the issue.
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以让多个线程一次打印到控制台而不包含包含旧信息的缓冲区?

谢谢

编辑:更新主线程中的代码,以更好地代表我的程序正在做什么.

java multithreading buffer println

6
推荐指数
1
解决办法
2万
查看次数