1
votes

I've spent several hours using different sources to figure out how to debug an Azure worker role written in Python. I even tried the steps here and I can't get breakpoints or VS Quick watch or Add watch to work.

I'm running VS Ultimate 2013 Update 4, Python 2.7.1, Python tools for VS 2.1.21008.00.

I followed the steps here to create a worker role in Python.

My code works as a stand-alone Python .PY file from Python IDLE. It successfully accesses my containers in Azure.

It works when run locally (although I can't debug it locally). My local storage emulator "(Development)" and the containers specified below work.

It deploys successfully to Azure. The associated worker role storage account is "online". The worker role itself is "Running" although it's not doing what I expect so I need to debug.

I set breakpoints, hit F5 to debug and the breakpoints aren't hit. Also, when I "break all" and try to watch a few variables I get "Unable to evaluate the expression".

The print statements below are left over from when I ran it from Python IDLE. The code is simple because I'm just trying to prove that I can get a worker role working.

Thanks in advance for any help you can provide.

import os
from time import sleep

from azure.storage import BlobService

STORAGE_ACCOUNT_NAME = 'my container is here'
STORAGE_ACCOUNT_KEY = 'my account key is here'
INPUT_CONTAINER = "inputcontainer"
OUTPUT_CONTAINER = "outputcontainer"

if os.environ.get('EMULATED', '').lower() == 'true':
    # Running in the emulator, so use the development storage account
    storage_account = CloudStorageAccount(None, None)
else:
    storage_account = CloudStorageAccount(STORAGE_ACCOUNT_NAME, STORAGE_ACCOUNT_KEY)

blob_service = BlobService(accountname=STORAGE_ACCOUNT_NAME, account_key=STORAGE_ACCOUNT_KEY)

if __name__ == '__main__':
    while True:
        # Write your worker process here.
        # Get a blob in the inputcontainer and copy to and rename it in the outputcontainer.

        input_blobs = blob_service.list_blobs(INPUT_CONTAINER)
        for blob in input_blobs:
            new_blobname = "processed_" + blob.name
            print 'blob name is: ', blob.name
            print 'blob url is: ', blob.url
        try:
            blob_service.copy_blob(
                OUTPUT_CONTAINER,
                new_blobname, 
                x_ms_copy_source=blob.url)
        except IOError:
           print 'ERROR!'
        else:
            print 'Blob copy was successful.'
1

1 Answers

1
votes

This question is pretty old, but no answer yet. So in case anyone runs into this answer before getting to the right page on Microsoft's site, you can debug Python Azure worker roles, but have to run it differently. Quoting from the linked site:

Although PTVS supports launching in the emulator, debugging (for example, breakpoints) will not work.

To debug your web and worker roles, you can set the role project as the startup project and debug that instead. You can also set multiple startup projects. Right-click the solution and then select Set StartUp Projects.

Following those instructions solved the problem for me.